::-webkit-scrollbar { width: 12px; height: 4px; background: rgba(111, 78, 78, 0.35); } ::-webkit-scrollbar-thumb { background-color: rgba(145, 36, 66, 0.99); -webkit-border-radius: 1ex; }
Tuesday, January 27, 2015
Wednesday, January 21, 2015
Add Ajax in Grid view YII
StandardHere is simple example to how create Ajax link on YII CGridview
array( 'name'='Attribute name', 'header'='Attribute title', 'value'='CHtml::ajaxLink( "link", array("url/action"), array( "update"="#Ajaxvenu", "type"="POST", "data" =; array( "POST[atttribute]" = $data->atttributename, ), ), )', // view this
Tuesday, December 30, 2014
Remove index.php from url YII
Standardcreate .htaccess under www-->yiisitename
add following code on .htaccess
Options +FollowSymLinks IndexIgnore */* RewriteEngine on # if a directory or a file exists, use it directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # otherwise forward it to index.php RewriteRule . index.php
http://localhost/sitename/index.php - default yii url
http://localhost/sitename/ - now run like this
Wednesday, December 17, 2014
datetime - How to Minus & pluse two dates in php
StandardHow do I return the date as pulse & Minus?
add days
$date=date_create(date("Y-m-d")); date_add($date,date_interval_create_from_date_string("10 days")); echo date_format($date,"Y-m-d");Minus days
$mydate = date("Y-m-d"); $lastday = strtotime("-1 days", strtotime($mydate)); echo date("Y-m-d", $lastday);
Tuesday, December 16, 2014
create CSV report in DB data YII
Standardhi guys this is my testing code about yii CSV report i created data table name as deal and i created Deal control & crud
this is my data table
CREATE TABLE IF NOT EXISTS `deals` ( `DealId` int(11) NOT NULL AUTO_INCREMENT, `DealName` varchar(255) NOT NULL, `Dealdescription` text NOT NULL, `Price` int(11) NOT NULL, `Discount` float NOT NULL, `StartingDate` varchar(50) NOT NULL, `EndingDate` varchar(50) NOT NULL, `DealCategory` varchar(45) NOT NULL, `DriverId` int(11) NOT NULL, `CreateDate` datetime NOT NULL, `ModifiedDate` datetime NOT NULL, `Status` enum('0','1') NOT NULL DEFAULT '0', PRIMARY KEY (`DealId`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
this is my report funtion in deal controller
condition = "DealId=".$DealId; $models= Deals::model()->findAll($criteria); // echo 'then i add report.php in view deal folder'. print_r($models,1).''; // die(); // Pick a filename and destination directory for the file // Remember that the folder where you want to write the file has to be writable $filename =Yii::getPathOfAlias('webroot').'/report/'.$DealId.'_report_by_'.$DealId.".csv"; // Actually create the file // The w+ parameter will wipe out and overwrite any existing file with the same name $handle = fopen($filename, 'w+'); // Write the spreadsheet column titles / labels fputcsv($handle, array( 'Dea lId', 'Deal Name', 'Deal description', 'Price', 'Discount', 'Start Date', 'EndDate', 'Deal Category', 'Driver Name', 'Status', )); foreach($models as $row) { fputcsv($handle, array ( $row['DealId'], $row['DealName'], $row['Dealdescription'], $row['Price'], $row['Discount'], $row['StartingDate'], $row['EndingDate'], $row['DealCategory'], $row['DriverId'], $row['Status'], )); } // Finish writing the file fclose($handle); $this->redirect(Yii::app()->getBaseUrl(true).'/report/'.$DealId.'_report_by_'.$DealId.'.csv', array('target'=>'_blank')); } $this->render('report',array( 'report'=>$report, )); } }
add following code in report.php
actionReport(1); ?>now you can get csv file
thank
Monday, December 8, 2014
YII ACCESS RULES from data base
Standardthis is represent haw add user access for specific users in to page
i have 2 table
- 1.user table
- 2.user level table
CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(20) NOT NULL, `password` varchar(128) NOT NULL, `email` varchar(128) NOT NULL, `Telephone` varchar(12) NOT NULL, `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `ModifiedDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', `lastvisit_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', `superuser` int(1) NOT NULL DEFAULT '0', `UserLevel` int(1) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `username` (`username`), UNIQUE KEY `email` (`email`), KEY `status` (`status`), KEY `superuser` (`superuser`) );
Userlevel table
CREATE TABLE IF NOT EXISTS `userlevels` ( `UserLevelId` int(11) NOT NULL AUTO_INCREMENT, `UserLevels` varchar(45) DEFAULT NULL, `CreateDate` datetime NOT NULL, `ModifiedDate` datetime NOT NULL, `Status` enum('0','1') NOT NULL DEFAULT '0', PRIMARY KEY (`UserLevelId`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ; -- -- Dumping data for table `userlevels` -- INSERT INTO `userlevels` (`UserLevelId`, `UserLevels`, `CreateDate`, `ModifiedDate`, `Status`) VALUES (0, 'Guest', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0'), (1, 'Admin', '2014-06-16 09:10:23', '0000-00-00 00:00:00', '1'), (2, 'Staff', '2014-12-10 00:00:00', '0000-00-00 00:00:00', '1');
i created Userrule.php file under protect -> components folder
class Userrule extends CWebModule { static private $_getaccess; public static function getAccess($userlevel) { if(is_array($userlevel)) { if (!self::$_getaccess) { $criteria = new CDbCriteria; $criteria->addInCondition('UserLevel',$userlevel,true); // $criteria->params = array(':userlevel' => $userlevel); //Apply To Model $usernames = Users::model()->findAll($criteria); // echo ''. print_r($usernames,1).''; // die(); $Access_name = array(); foreach ($usernames as $username) array_push($Access_name,$username->username); self::$_getaccess = $Access_name; } return self::$_getaccess; } else { if (!self::$_getaccess) { $criteria = new CDbCriteria; $criteria->condition = 'UserLevel='.$userlevel; //Apply To Model $usernames = Users::model()->findAll($criteria); $Access_name = array(); foreach ($usernames as $username) array_push($Access_name,$username->username); self::$_getaccess = $Access_name; } return self::$_getaccess; } } }
in above param function define which user should be access
now you can call this function in to accessRules() in every controller & add which user level will be access
public function accessRules() { return array( array('allow', // allow all users to perform 'index' and 'view' actions 'actions'=>array('index','view'), 'users'=> Userrule::getAccess(array(0,1,6)),//send as array ), array('allow', // allow all users to perform 'index' and 'view' actions 'actions'=>array('create'), // 'users'=> Userrule::getAccess(1), 'users'=> Userrule::getAccess(array(1,6)),//send as array // 'users'=>array('admin','channa'), ), array('allow', // allow admin user to perform 'admin' and 'delete' actions // 'actions'=>array('admin','delete'), 'actions'=>array('delete','update'), 'users'=> Userrule::getAccess(1),//send as variable ), array('deny', // deny all users 'users'=>array('*'), ), ); }
sd
Friday, December 5, 2014
Yii User access rules
Standardthis for YII USER MODULE
Load and store the user's data every time a page is requested. To do this, modify the Controller class as follows:
i added this on compound controller becouse All controller classes for this application should extend from this base class.
public function isGuest() { $user=User::model()->active()->findbyPk(Yii::app()->user->id); // print_r($user->superuser); if($user->superuser==0) {throw new CHttpException(403, 'You have no permission to view this content');} return UserModule::isAdmin(); }
add this expression for all accessRules
public function accessRules() { return array( array('allow', // allow admin user to perform 'admin' and 'delete' actions 'actions'=>array('index','view','delete', 'admin'), 'expression'=> $this->isAdmin(), ), ); }
Thursday, December 4, 2014
YII Send Email & get Template content from database Part -2
Standardi created template folder on view & create file name as user_registation.php
sample email template by channa smcs |
public function actionEmail() { // echo 'i added this on controoler file in configuration folder'.(print_r($_POST,1)).''; if(isset($_POST)) { // get data on variable by channa $variables=array( '{fname}'=>'channa', '{lname}'=>'bandara', '{email}'=>'channasmcs@gmail.com', '{dob}'=>'1989-01-01', '{password}'=>'thisiamy password', ); // get template using template name by channa $templatedata= self::getemailtemple('User Registration Template') ;// function in controller(configuration) // get template data in to variable by channa $description=$templatedata->description; $subject=$templatedata->subject; // send $description $description to VariableReplaceArray by channa $emailbody= $this->VariableReplaceArray($description, $variables) ; //function in controller(configuration) // send email detail to templte using renderPartial by channa $emailbodydetail=array( 'emailbodydetail'=>$emailbody, ); // send message detail to template by channa $messageUser = $this->renderPartial('/template/user_register',$emailbodydetail,true); // set up email configuration by channa $name = 'channa'; $email = 'hellochannasmcs@gmail.com'; $Telephone = '0715977097'; $to = 'hellochannasmcs@hotmail.com'; $subject = $subject; $messageAdmin = "Deal Admin"; self::email($name, $email, $subject, $messageUser); self::email($name, $email, $subject, $messageAdmin, TRUE); // // echo ''.(print_r($messageUser,1)).''; // echo ''.(print_r($messageAdmin,1)).''; } // $this->renderPartial('/template/view'); $this->render('email'); } }
// get email template from database by channa public static function getemailtemple($temppalatename) { return $templatedetail= Emailtemplate::model()->find("name='".$temppalatename."'"); } // repalce variable syntex related with initialz input by channa public function VariableReplaceArray($message,$variables) { // print_r($variable); $getvariableArray=array_keys($variables); $replacevariableArray=array_values($variables); return str_replace($getvariableArray,$replacevariableArray,$message); }
YII Send Email & get Template content from database Part -1
Standardin priviouse blog make send user email & admin email .
in this blog i coding sent email using email template & get email content from data base .
1.create email template table to insert email data
CREATE TABLE IF NOT EXISTS `emailtemplate` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(55) NOT NULL, `variables` varchar(255) NOT NULL, `subject` varchar(255) NOT NULL, `description` text NOT NULL, `status` enum('1','0') NOT NULL DEFAULT '1' COMMENT '0=inactive,1=active', PRIMARY KEY (`id`), KEY `id` (`id`) );then i created back end data manage option in my web site back end ..pretty cool
INSERT INTO `emailtemplate` (`id`, `name`, `variables`, `subject`, `description`, `status`) VALUES (1, 'User Registration Template', '{fname},{lname},{email},{dob}{password}', 'User Registration', '\r\n Thank You Regiter With Us .... \r\n\r\n After you register, your request will be sent to the site administrator for approval. You will then receive an email with further instructions. \r\nnow back end look like this\r\n Your name : {fname} {lname}\r\n\r\n Email : {email}\r\n\r\n DOB: {dob}\r\n\r\n Password: {password}\r\n\r\n Thank you\r\n\r\n Stream line staff\r\n', '1');
send email YII
StandardIn this tutorial, how to send user email & admin email .most developers are doesn't like use extension i think that is good because that extension may be have unnecessary things we need .but extension is very helpful for reduce our coding time .for this complete mr. gayan senjeewa help & i really appreciate for that .thanks
here code
i used to controller file on components folder because.All controller classes for this application should extend from this base class.
this is main email sending function .add this on controller
//Controller in confuguration public static function email($userName, $userEmail, $subject, $message, $toAdmin = FALSE, $isCC = FALSE) { $subject='=?UTF-8?B?'.base64_encode($subject).'?='; $to = ''; $from = ''; $cc = ''; if ($toAdmin) { $to = 'admin@mail.com';//admin Email $from = 'supportemail@mail.com'; //support user email for } else { $to = $userEmail; $from = 'admin@mail.com';//admin Email } if($isCC) { $headers="From: <{$from}>\r\n". "Cc: {$from}\r\n". "Reply-To: {$from}\r\n". "MIME-Version: 1.0\r\n". "Content-Transfer-Encoding: 8bit\r\n". "Content-Type: text/html; charset=ISO-8859-1\r\n"; } else { $headers="From: <{$from}>\r\n". "Reply-To: {$from}\r\n". "MIME-Version: 1.0\r\n". "Content-Transfer-Encoding: 8bit\r\n". "Content-Type: text/html; charset=ISO-8859-1\r\n"; } return mail($to, $subject,$message,$headers); }i update actionContact funtion
public function actionContact() { $model=new ContactForm; if(isset($_POST['ContactForm'])) { // $model->attributes=$_POST['ContactForm']; if($model->validate()) { // $name='=?UTF-8?B?'.base64_encode($model->name).'?='; // $subject='=?UTF-8?B?'.base64_encode($model->subject).'?='; // $headers="From: $name <{$model->email}>\r\n". // "Reply-To: {$model->email}\r\n". // "MIME-Version: 1.0\r\n". // "Content-Type: text/plain; charset=UTF-8"; // // mail(Yii::app()->params['adminEmail'],$subject,$model->body,$headers); // $name = $model->name; $email = $model->email; $Telephone = '0715977097'; $to = 'admin@mail.com'; $subject = $model->subject; $messageUser = "Thank you for contacting us"; $messageAdmin = " Deal Admin, you have email from $model->name from $model->email $model->body thank you "; self::email($name, $email, $subject, $messageUser);//send mail to user self::email($name, $email, $subject, $messageAdmin, TRUE);//send mail to admin Yii::app()->user->setFlash('contact','Thank you for contacting us. We will respond to you as soon as possible.'); $this->refresh(); } } $this->render('contact',array('model'=>$model)); }
Monday, December 1, 2014
get image on Gridview YII
Standardin this you can call image view on YII grid view
<!--
widget('zii.widgets.grid.CGridView', array( 'id'=>'modelname-grid', 'dataProvider'=>$media->search(), 'filter'=>$media, 'columns'=>array( // 'id', array( 'name'=>'url', 'header'=>'url ', 'value'=>'CHtml::image(Yii::app()->request->baseUrl."/images/media/".$data->url, "", array(\'width\'=>100, \'height\'=>60))', 'type'=>'raw', ), 'name', 'createdate', array( 'class'=>'CButtonColumn', 'template'=>'{delete}', ), ), )); ?>
Thursday, November 27, 2014
Yii Gridview CButton style
StandardThis code shows about how to add a custom button with your own icon for your CGridView of Yii framework.“view”, “update”, “delete” button and it have corresponding actions. We can change it using CButtonColumn properties.
widget('zii.widgets.grid.CGridView', array( 'id'=>'modelname-grid', 'dataProvider'=>$model->search(), 'filter'=>$model, 'columns'=>array( 'rowname1', 'rowname2', array( 'class'=>'CButtonColumn', 'template'=>'{view}{update}{delete}', 'deleteButtonImageUrl' => Yii::app()->theme->baseUrl .'/images/'.'close-button.png', 'deleteButtonOptions'=>array( 'class'=>'delete_class', 'id'=>'delete_id', ), 'updateButtonImageUrl' => Yii::app()->theme->baseUrl .'/images/'.'edit-button.png', 'updateButtonOptions'=>array( 'class'=>'update_class', 'id'=>'update_id', ), 'viewButtonImageUrl' => Yii::app()->theme->baseUrl .'/images/'.'view-button.png', 'viewButtonOptions'=>array( 'class'=>'view_class', 'id'=>'view_id', ), ), ), )); ?>
if you want add this in YII framework follow this
open \CButtonColumn.php
..\yii\framework\zii\widgets\grid\CButtonColumn.php
defult code[line 215] function initDefaultButtons()
protected function initDefaultButtons() { if($this->viewButtonLabel===null) $this->viewButtonLabel=Yii::t('zii','View'); if($this->updateButtonLabel===null) $this->updateButtonLabel=Yii::t('zii','Update'); if($this->deleteButtonLabel===null) $this->deleteButtonLabel=Yii::t('zii','Delete'); if($this->viewButtonImageUrl===null) $this->viewButtonImageUrl=$this->grid->baseScriptUrl.'/view.png'; if($this->updateButtonImageUrl===null) $this->updateButtonImageUrl=$this->grid->baseScriptUrl.'/update.png'; if($this->deleteButtonImageUrl===null) $this->deleteButtonImageUrl=$this->grid->baseScriptUrl.'/delete.png'; }
update code function initDefaultButtons()
protected function initDefaultButtons() { if($this->viewButtonLabel===null) $this->viewButtonLabel=Yii::t('zii','View'); if($this->updateButtonLabel===null) $this->updateButtonLabel=Yii::t('zii','Update'); if($this->deleteButtonLabel===null) $this->deleteButtonLabel=Yii::t('zii','Delete'); if($this->viewButtonImageUrl===null) $this->viewButtonImageUrl=Yii::app()->theme->baseUrl .'/images/'.'view-button.png'; if($this->updateButtonImageUrl===null) $this->updateButtonImageUrl=Yii::app()->theme->baseUrl .'/images/'.'edit-button.png'; if($this->deleteButtonImageUrl===null) $this->deleteButtonImageUrl=Yii::app()->theme->baseUrl .'/images/'.'close-button.png'; }
Sharp AQUOS Android Smartphone
StandardSharp Corporation collaborated with frog's team of designers and technologists to create “Feel UX”, a new Android smartphone experience that is easy to use, highly personalized, and visually stunning.
STUNNING 3D REALISM ON SCREENThe AQUOS Phone's parallax barrier system—which imitates the parallax difference between our right and left eye—enables the display of vivid three-dimensional HD images without the need for glasses. The phone recognises if content is 2D or 3D at playback, and adjusts accordingly. You can even convert 2D images into 3D, and vice versa, simply by switching the parallax barrier on or off.
Experience a new level of brilliance with Sharp's 4.2-inch LCD and ProPix image processor—technology derived from our line of AQUOS TVs. Boasting 540 x 960p qHD resolution—a quarter that of full 1920 x 1080p HD—the wide screen gives greater dynamic impact to movies and gameplay.
You'll no longer need to zoom in when browsing the internet, with the LCD's outstanding resolution making small text easier to read.
Software features
Some of the Aquos Crystal's unique software features include a gesture motion called "Clip Now." In addition to holding the bottom volume key and power button to take a screenshot, users can swipe the top edge of the display and save screenshots into a Clip Now image folder.
Get Country of IP Address with PHP
StandardI'm trying to put together a PHP script that I can query from any web browser and it returns the Country of the IP address that accessed the PHP script
There are various web APIs that will do this for you. Here's an example using http://ipinfo.io:
$ip = $_SERVER['REMOTE_ADDR']; $details = json_decode(file_get_contents("http://ipinfo.io/{$ip}")); echo $details;
Here's an example using
http://www.geoplugin.net/json.gp
$ip = $_SERVER['REMOTE_ADDR']; $details = json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip={$ip}")); echo $details;
Wednesday, November 26, 2014
ajax reload after submit YII
Standard'#divid', 'type'=>'POST', 'data' => array( 'model[name]' =>''data, ), 'success' =>'js:function(html){ location.reload(); }' ), ); ?>
YII Add Loading IMAGE on ajex
StandardbeginWidget('CActiveForm', array( 'id'=>'listings-getdata_Ajax', 'enableAjaxValidation'=>FALSE, )); ?> params['Radius'], array( 'ajax'=>array( 'type'=>'POST', 'url'=>CController::createUrl('listings/getdata_Ajax'), 'update'=>'#getdata', 'data' => array( 'Getdata[radius]'=>'js:this.value', 'Getdata[city]'=>$model->PhysicalCity, ) ), 'class'=>'form-control input-sm', 'empty'=>'Select Province', 'required'=>TRUE, ) ); ?> clientScript->registerScript('loaderScript', ' $("#loader") .hide() .ajaxStart(function() { $(this).show(); }) .ajaxStop(function() { $(this).hide(); });', CClientScript::POS_END); ?> theme->baseUrl.'/images/loader.gif', '', array('id' => 'loader', 'style' => ''));?> public function actionGetdata_Ajax() { echo 'hello'; }
create div stick to top when scrolled
StandardjQuery code:
/ executed when the viewr scrolls the page. $(window).scroll(function(e) { // Get the position of the location where the scroller starts. var scroller_anchor = $(".scroller_anchor").offset().top; // Check if the user has scrolled and the current position is after the scroller start location and if its not already fixed at the top if ($(this).scrollTop() >= scroller_anchor && $('.scroller').css('position') != 'fixed') { // Change the CSS of the scroller to hilight it and fix it at the top of the screen. $('.scroller').css({ 'background': '#CCC', 'border': '1px solid #000', 'position': 'fixed', 'top': '0px' }); // Changing the height of the scroller anchor to that of scroller so that there is no change in the overall height of the page. $('.scroller_anchor').css('height', '50px'); } else if ($(this).scrollTop() < scroller_anchor && $('.scroller').css('position') != 'relative') { // If the user has scrolled back to the location above the scroller anchor place it back into the content. // Change the height of the scroller anchor to 0 and now we will be adding the scroller back to the content. $('.scroller_anchor').css('height', '0px'); // Change the CSS and put it back to its original position. $('.scroller').css({ 'background': '#FFF', 'border': '1px solid #CCC', 'position': 'relative' }); } });HTML Code:
CSSCode:What if drugs were legal? Could you imagine what it would do to our society? Well according to John E. LeMoult, a lawyer with twenty years of experience on the subject, feels we should at least consider it. I would like to comment on his article "Legalize Drugs" in the June 15, 1984, issue of the New York Times. I disagree with LeMoult's idea of legalizing drugs to cut the cost of crime.This is the scrollable barWhat if drugs were legal? Could you imagine what it would do to our society? Well according to John E. LeMoult, a lawyer with twenty years of experience on the subject, feels we should at least consider it. I would like to comment on his article "Legalize Drugs" in the June 15, 1984, issue of the New York Times. I disagree with LeMoult's idea of legalizing drugs to cut the cost of crime.
.container{font-size:14px; margin:0 auto; width:960px} .test_content{margin:10px 0;} .scroller_anchor{height:0px; margin:0; padding:0;} .scroller{background:#FFF; border:1px solid #CCC; margin:0 0 10px; z-index:100; height:50px; font-size:18px; font-weight:bold; text-align:center; width:960px;}
website's content on the Twitter wall Yii
StandardAdd buttons to your website to help your visitors share content and connect on Twitter.
data-via="CompanyName; ?>"> Tweet
website's content on the faebook wall Yii
Standardpost my website's content on the faebook wall. who want to share it.
<pre class="java" name="code"><div id="fb-root">
</div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<div class="fb-share-button" data-href="<?php echo Yii::app()->theme->baseUrl;?>/index.php/listings/<?php echo $model->ListingId; ?>" data-type="button_count" data-width="200">
</div>
<!--<div class="fb-share-button" data-href="http://channasmcs.blogspot.com/2014/09/onclick-selected-value-in-input-box.html" data-type="button_count" data-width="200">
</div>
<div class="fb-share-button" data-href="https://developers.facebook.com/docs/plugins/" data-type="box_count">
</div>
</pre>
Sunday, November 16, 2014
GRID & LIST Switch by Using Bootstrap
StandardHTML Code:
![]()
Product title
Product description... Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
$21.000
![]()
Product title
Product description... Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
$21.000
![]()
Product title
Product description... Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
$21.000
![]()
Product title
Product description... Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
$21.000
![]()
Product title
Product description... Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
$21.000
![]()
Product title
Product description... Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
$21.000
CSS Code:
JQ Code:
GRID