Thứ Ba, 26 tháng 11, 2019

Create Product per page on mobile in magento 1


The fisrt create a module is called Lamtruongvn_Catalog.
You will need the following files:
app/etc/modules/Lamtruongvn_Catalog.xml - the declaration file


 <?xml version="1.0"?>  
 <config>  
   <modules>  
     <Lamtruongvn_Catalog>  
       <active>true</active>  
       <codePool>local</codePool>  
       <depends>  
         <Mage_Catalog />  
       </depends>  
     </Lamtruongvn_Catalog>  
   </modules>  
 </config>  

app/code/local/Lamtruongvn/Catalog/etc/config.xml - the configuration file


 <?xml version="1.0"?>  
 <config>  
   <modules>  
     <Lamtruongvn_Catalog>  
       <version>0.0.1</version>  
     </Lamtruongvn_Catalog>  
   </modules>  
 </config>  

app/etc/local/Lamtruongvn/Catalog/etc/system.xml - system->configuration file

 <?xml version="1.0"?>  
 <config>  
   <sections>  
     <catalog><!-- first part of the path -->  
       <groups>  
         <frontend><!-- second part of the path -->  
           <fields>  
             <grid_per_page_values_mobile translate="label"><!-- your new field -->  
               <label>Products per Page on Mobile Grid Allowed Values</label>  
               <comment>Comma-separated.</comment>  
               <frontend_type>text</frontend_type>  
               <validate>validate-per-page-value-list-mobile</validate>  
               <!--<source_model>adminhtml/system_config_source_catalog_gridPerPage</source_model>-->  
               <sort_order>2</sort_order>  
               <show_in_default>1</show_in_default>  
               <show_in_website>1</show_in_website>  
               <show_in_store>1</show_in_store>  
             </grid_per_page_values_mobile>  
             <grid_per_page_mobile translate="label"><!-- your new field -->  
               <label>Products per Page on Mobile Grid Default Value</label>  
               <comment>Must be in the allowed values list.</comment>  
               <frontend_type>text</frontend_type>  
               <validate>validate-per-page-value-mobile</validate>  
               <!--<source_model>adminhtml/system_config_source_catalog_gridPerPage</source_model>-->  
               <sort_order>4</sort_order>  
               <show_in_default>1</show_in_default>  
               <show_in_website>1</show_in_website>  
               <show_in_store>1</show_in_store>  
             </grid_per_page_mobile>  
           </fields>  
         </frontend>  
       </groups>  
     </catalog>  
   </sections>  
 </config>  

And after add code  in file  local/Mage/Catalog/Block/Product_List/Toolbar.php


 <?php  
 /**  
  * Magento  
  *  
  * NOTICE OF LICENSE  
  *  
  * This source file is subject to the Open Software License (OSL 3.0)  
  * that is bundled with this package in the file LICENSE.txt.  
  * It is also available through the world-wide-web at this URL:  
  * http://opensource.org/licenses/osl-3.0.php  
  * If you did not receive a copy of the license and are unable to  
  * obtain it through the world-wide-web, please send an email  
  * to license@magento.com so we can send you a copy immediately.  
  *  
  * DISCLAIMER  
  *  
  * Do not edit or add to this file if you wish to upgrade Magento to newer  
  * versions in the future. If you wish to customize Magento for your  
  * needs please refer to http://www.magento.com for more information.  
  *  
  * @category  Mage  
  * @package   Mage_Catalog  
  * @copyright Copyright (c) 2006-2017 X.commerce, Inc. and affiliates (http://www.magento.com)  
  * @license  http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)  
  */  
 /**  
  * Product list toolbar  
  *  
  * @category  Mage  
  * @package   Mage_Catalog  
  * @author   Magento Core Team <core@magentocommerce.com>  
  */  
 class Mage_Catalog_Block_Product_List_Toolbar extends Mage_Core_Block_Template  
 {  
   /**  
    * Products collection  
    *  
    * @var Mage_Core_Model_Mysql4_Collection_Abstract  
    */  
   protected $_collection = null;  
   /**  
    * GET parameter page variable  
    *  
    * @var string  
    */  
   protected $_pageVarName   = 'p';  
   /**  
    * GET parameter order variable  
    *  
    * @var string  
    */  
   protected $_orderVarName    = 'order';  
   /**  
    * GET parameter direction variable  
    *  
    * @var string  
    */  
   protected $_directionVarName  = 'dir';  
   /**  
    * GET parameter mode variable  
    *  
    * @var string  
    */  
   protected $_modeVarName     = 'mode';  
   /**  
    * GET parameter limit variable  
    *  
    * @var string  
    */  
   protected $_limitVarName    = 'limit';  
   /**  
    * List of available order fields  
    *  
    * @var array  
    */  
   protected $_availableOrder   = array();  
   /**  
    * List of available view types  
    *  
    * @var string  
    */  
   protected $_availableMode    = array();  
   /**  
    * Is enable View switcher  
    *  
    * @var bool  
    */  
   protected $_enableViewSwitcher = true;  
   /**  
    * Is Expanded  
    *  
    * @var bool  
    */  
   protected $_isExpanded     = true;  
   /**  
    * Default Order field  
    *  
    * @var string  
    */  
   protected $_orderField     = null;  
   /**  
    * Default direction  
    *  
    * @var string  
    */  
   protected $_direction      = 'asc';  
   /**  
    * Default View mode  
    *  
    * @var string  
    */  
   protected $_viewMode      = null;  
   /**  
    * Available page limits for different list modes  
    *  
    * @var array  
    */  
   protected $_availableLimit = array();  
   /**  
    * Default limits per page  
    *  
    * @var array  
    */  
   protected $_defaultAvailableLimit = array(10=>10,20=>20,50=>50);  
   /**  
    * @var bool $_paramsMemorizeAllowed  
    */  
   protected $_paramsMemorizeAllowed = true;  
   /**  
    * Retrieve Catalog Config object  
    *  
    * @return Mage_Catalog_Model_Config  
    */  
   protected function _getConfig()  
   {  
     return Mage::getSingleton('catalog/config');  
   }  
   /**  
    * Init Toolbar  
    *  
    */  
   protected function _construct()  
   {  
     parent::_construct();  
     $this->_direction = Mage::getStoreConfig('direction_sort/general/default');  
     $this->_orderField = Mage::getStoreConfig(  
       Mage_Catalog_Model_Config::XML_PATH_LIST_DEFAULT_SORT_BY  
     );  
     $this->_availableOrder = $this->_getConfig()->getAttributeUsedForSortByArray();  
     switch (Mage::getStoreConfig('catalog/frontend/list_mode')) {  
       case 'grid':  
         $this->_availableMode = array('grid' => $this->__('Grid'));  
         break;  
       case 'list':  
         $this->_availableMode = array('list' => $this->__('List'));  
         break;  
       case 'grid-list':  
         $this->_availableMode = array('grid' => $this->__('Grid'), 'list' => $this->__('List'));  
         break;  
       case 'list-grid':  
         $this->_availableMode = array('list' => $this->__('List'), 'grid' => $this->__('Grid'));  
         break;  
     }  
     $this->setTemplate('catalog/product/list/toolbar.phtml');  
   }  
   /**  
    * Disable list state params memorizing  
    */  
   public function disableParamsMemorizing()  
   {  
     $this->_paramsMemorizeAllowed = false;  
     return $this;  
   }  
   /**  
    * Memorize parameter value for session  
    *  
    * @param string $param parameter name  
    * @param mixed $value parameter value  
    * @return Mage_Catalog_Block_Product_List_Toolbar  
    */  
   protected function _memorizeParam($param, $value)  
   {  
     $session = Mage::getSingleton('catalog/session');  
     if ($this->_paramsMemorizeAllowed && !$session->getParamsMemorizeDisabled()) {  
       $session->setData($param, $value);  
     }  
     return $this;  
   }  
   /**  
    * Set collection to pager  
    *  
    * @param Varien_Data_Collection $collection  
    * @return Mage_Catalog_Block_Product_List_Toolbar  
    */  
   public function setCollection($collection)  
   {  
     $this->_collection = $collection;  
     $this->_collection->setCurPage($this->getCurrentPage());  
     // we need to set pagination only if passed value integer and more that 0  
     $limit = (int)$this->getLimit();  
     if ($limit) {  
       $this->_collection->setPageSize($limit);  
     }  
     if ($this->getCurrentOrder()) {  
       $this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection());  
     }  
     return $this;  
   }  
   /**  
    * Return products collection instance  
    *  
    * @return Mage_Core_Model_Mysql4_Collection_Abstract  
    */  
   public function getCollection()  
   {  
     return $this->_collection;  
   }  
   /**  
    * Getter for $_pageVarName  
    *  
    * @return string  
    */  
   public function getPageVarName()  
   {  
     return $this->_pageVarName;  
   }  
   /**  
    * Retrieve order field GET var name  
    *  
    * @return string  
    */  
   public function getOrderVarName()  
   {  
     return $this->_orderVarName;  
   }  
   /**  
    * Retrieve sort direction GET var name  
    *  
    * @return string  
    */  
   public function getDirectionVarName()  
   {  
     return $this->_directionVarName;  
   }  
   /**  
    * Retrieve view mode GET var name  
    *  
    * @return string  
    */  
   public function getModeVarName()  
   {  
     return $this->_modeVarName;  
   }  
   /**  
    * Getter for $_limitVarName  
    *  
    * @return string  
    */  
   public function getLimitVarName()  
   {  
     return $this->_limitVarName;  
   }  
   /**  
    * Return current page from request  
    *  
    * @return int  
    */  
   public function getCurrentPage()  
   {  
     if ($page = (int) $this->getRequest()->getParam($this->getPageVarName())) {  
       return $page;  
     }  
     return 1;  
   }  
   /**  
    * Get grit products sort order field  
    *  
    * @return string  
    */  
   public function getCurrentOrder()  
   {  
     $order = $this->_getData('_current_grid_order');  
     if ($order) {  
       return $order;  
     }  
     $orders = $this->getAvailableOrders();  
     $defaultOrder = $this->_orderField;  
     if (!isset($orders[$defaultOrder])) {  
       $keys = array_keys($orders);  
       $defaultOrder = $keys[0];  
     }  
     $order = $this->getRequest()->getParam($this->getOrderVarName());  
     if ($order && isset($orders[$order])) {  
       if ($order == $defaultOrder) {  
         Mage::getSingleton('catalog/session')->unsSortOrder();  
       } else {  
         $this->_memorizeParam('sort_order', $order);  
       }  
     } else {  
       $order = Mage::getSingleton('catalog/session')->getSortOrder();  
     }  
     // validate session value  
     if (!$order || !isset($orders[$order])) {  
       $order = $defaultOrder;  
     }  
     $this->setData('_current_grid_order', $order);  
     return $order;  
   }  
   /**  
    * Retrieve current direction  
    *  
    * @return string  
    */  
   public function getCurrentDirection()  
   {  
     $dir = $this->_getData('_current_grid_direction');  
     if ($dir) {  
       return $dir;  
     }  
     $directions = array('asc', 'desc');  
     $dir = strtolower($this->getRequest()->getParam($this->getDirectionVarName()));  
     if ($dir && in_array($dir, $directions)) {  
       if ($dir == $this->_direction) {  
         Mage::getSingleton('catalog/session')->unsSortDirection();  
       } else {  
         $this->_memorizeParam('sort_direction', $dir);  
       }  
     } else {  
       $dir = Mage::getSingleton('catalog/session')->getSortDirection();  
     }  
     // validate direction  
     if (!$dir || !in_array($dir, $directions)) {  
       $dir = $this->_direction;  
     }  
     $this->setData('_current_grid_direction', $dir);  
     return $dir;  
   }  
   /**  
    * Set default Order field  
    *  
    * @param string $field  
    * @return Mage_Catalog_Block_Product_List_Toolbar  
    */  
   public function setDefaultOrder($field)  
   {  
     if (isset($this->_availableOrder[$field])) {  
       $this->_orderField = $field;  
     }  
     return $this;  
   }  
   /**  
    * Set default sort direction  
    *  
    * @param string $dir  
    * @return Mage_Catalog_Block_Product_List_Toolbar  
    */  
   public function setDefaultDirection($dir)  
   {  
     if (in_array(strtolower($dir), array('asc', 'desc'))) {  
       $this->_direction = strtolower($dir);  
     }  
     return $this;  
   }  
   /**  
    * Retrieve available Order fields list  
    *  
    * @return array  
    */  
   public function getAvailableOrders()  
   {  
     return $this->_availableOrder;  
   }  
   /**  
    * Set Available order fields list  
    *  
    * @param array $orders  
    * @return Mage_Catalog_Block_Product_List_Toolbar  
    */  
   public function setAvailableOrders($orders)  
   {  
     $this->_availableOrder = $orders;  
     return $this;  
   }  
   /**  
    * Add order to available orders  
    *  
    * @param string $order  
    * @param string $value  
    * @return Mage_Catalog_Block_Product_List_Toolbar  
    */  
   public function addOrderToAvailableOrders($order, $value)  
   {  
     $this->_availableOrder[$order] = $value;  
     return $this;  
   }  
   /**  
    * Remove order from available orders if exists  
    *  
    * @param string $order  
    * @param Mage_Catalog_Block_Product_List_Toolbar  
    */  
   public function removeOrderFromAvailableOrders($order)  
   {  
     if (isset($this->_availableOrder[$order])) {  
       unset($this->_availableOrder[$order]);  
     }  
     return $this;  
   }  
   /**  
    * Compare defined order field vith current order field  
    *  
    * @param string $order  
    * @return bool  
    */  
   public function isOrderCurrent($order)  
   {  
     return ($order == $this->getCurrentOrder());  
   }  
   /**  
    * Retrieve Pager URL  
    *  
    * @param string $order  
    * @param string $direction  
    * @return string  
    */  
   public function getOrderUrl($order, $direction)  
   {  
     if (is_null($order)) {  
       $order = $this->getCurrentOrder() ? $this->getCurrentOrder() : $this->_availableOrder[0];  
     }  
     return $this->getPagerUrl(array(  
       $this->getOrderVarName()=>$order,  
       $this->getDirectionVarName()=>$direction,  
       $this->getPageVarName() => null  
     ));  
   }  
   /**  
    * Return current URL with rewrites and additional parameters  
    *  
    * @param array $params Query parameters  
    * @return string  
    */  
   public function getPagerUrl($params=array())  
   {  
     $urlParams = array();  
     $urlParams['_current'] = true;  
     $urlParams['_escape']  = true;  
     $urlParams['_use_rewrite']  = true;  
     $urlParams['_query']  = $params;  
     return $this->getUrl('*/*/*', $urlParams);  
   }  
   /**  
    * Retrieve current View mode  
    *  
    * @return string  
    */  
   public function getCurrentMode()  
   {  
     $mode = $this->_getData('_current_grid_mode');  
     if ($mode) {  
       return $mode;  
     }  
     $modes = array_keys($this->_availableMode);  
     $defaultMode = current($modes);  
     $mode = $this->getRequest()->getParam($this->getModeVarName());  
     if ($mode) {  
       if ($mode == $defaultMode) {  
         Mage::getSingleton('catalog/session')->unsDisplayMode();  
       } else {  
         $this->_memorizeParam('display_mode', $mode);  
       }  
     } else {  
       $mode = Mage::getSingleton('catalog/session')->getDisplayMode();  
     }  
     if (!$mode || !isset($this->_availableMode[$mode])) {  
       $mode = $defaultMode;  
     }  
     $this->setData('_current_grid_mode', $mode);  
     return $mode;  
   }  
   /**  
    * Compare defined view mode with current active mode  
    *  
    * @param string $mode  
    * @return bool  
    */  
   public function isModeActive($mode)  
   {  
     return $this->getCurrentMode() == $mode;  
   }  
   /**  
    * Retrieve availables view modes  
    *  
    * @return array  
    */  
   public function getModes()  
   {  
     return $this->_availableMode;  
   }  
   /**  
    * Set available view modes list  
    *  
    * @param array $modes  
    * @return Mage_Catalog_Block_Product_List_Toolbar  
    */  
   public function setModes($modes)  
   {  
     if(!isset($this->_availableMode)){  
       $this->_availableMode = $modes;  
     }  
     return $this;  
   }  
   /**  
    * Retrive URL for view mode  
    *  
    * @param string $mode  
    * @return string  
    */  
   public function getModeUrl($mode)  
   {  
     return $this->getPagerUrl( array($this->getModeVarName()=>$mode, $this->getPageVarName() => null) );  
   }  
   /**  
    * Disable view switcher  
    *  
    * @return Mage_Catalog_Block_Product_List_Toolbar  
    */  
   public function disableViewSwitcher()  
   {  
     $this->_enableViewSwitcher = false;  
     return $this;  
   }  
   /**  
    * Enable view switcher  
    *  
    * @return Mage_Catalog_Block_Product_List_Toolbar  
    */  
   public function enableViewSwitcher()  
   {  
     $this->_enableViewSwitcher = true;  
     return $this;  
   }  
   /**  
    * Is a enabled view switcher  
    *  
    * @return bool  
    */  
   public function isEnabledViewSwitcher()  
   {  
     return $this->_enableViewSwitcher;  
   }  
   /**  
    * Disable Expanded  
    *  
    * @return Mage_Catalog_Block_Product_List_Toolbar  
    */  
   public function disableExpanded()  
   {  
     $this->_isExpanded = false;  
     return $this;  
   }  
   /**  
    * Enable Expanded  
    *  
    * @return Mage_Catalog_Block_Product_List_Toolbar  
    */  
   public function enableExpanded()  
   {  
     $this->_isExpanded = true;  
     return $this;  
   }  
   /**  
    * Check is Expanded  
    *  
    * @return bool  
    */  
   public function isExpanded()  
   {  
     return $this->_isExpanded;  
   }  
   /**  
    * Retrieve default per page values  
    *  
    * @return string (comma separated)  
    */  
   public function getDefaultPerPageValue()  
   {  
     if ($this->getCurrentMode() == 'list') {  
       if ($default = $this->getDefaultListPerPage()) {  
         return $default;  
       }  
       return Mage::getStoreConfig('catalog/frontend/list_per_page');  
     }  
     elseif ($this->getCurrentMode() == 'grid') {  
       if ($default = $this->getDefaultGridPerPage()) {  
         return $default;  
       }  
       // $limit = 5;  
       $isMobile = Zend_Http_UserAgent_Mobile::match(  
         Mage::helper('core/http')->getHttpUserAgent(),  
         $_SERVER  
       );  
       if($isMobile){  
         return Mage::getStoreConfig('catalog/frontend/grid_per_page_mobile');  
       }else{  
         return Mage::getStoreConfig('catalog/frontend/grid_per_page');  
       }  
     }  
     return 0;  
   }  
   /**  
    * Add new limit to pager for mode  
    *  
    * @param string $mode  
    * @param string $value  
    * @param string $label  
    * @return Mage_Catalog_Block_Product_List_Toolbar  
    */  
   public function addPagerLimit($mode, $value, $label='')  
   {  
     if (!isset($this->_availableLimit[$mode])) {  
       $this->_availableLimit[$mode] = array();  
     }  
     $this->_availableLimit[$mode][$value] = empty($label) ? $value : $label;  
     return $this;  
   }  
   /**  
    * Retrieve available limits for current view mode  
    *  
    * @return array  
    */  
   public function getAvailableLimit()  
   {  
     $currentMode = $this->getCurrentMode();  
     if (in_array($currentMode, array('list', 'grid'))) {  
       return $this->_getAvailableLimit($currentMode);  
     } else {  
       return $this->_defaultAvailableLimit;  
     }  
   }  
   /**  
    * Retrieve available limits for specified view mode  
    *  
    * @return array  
    */  
   protected function _getAvailableLimit($mode)  
   {  
     if (isset($this->_availableLimit[$mode])) {  
       return $this->_availableLimit[$mode];  
     }  
     // $limit = 5;  
     $isMobile = Zend_Http_UserAgent_Mobile::match(  
       Mage::helper('core/http')->getHttpUserAgent(),  
       $_SERVER  
     );  
     if($isMobile){  
       $perPageConfigKey = 'catalog/frontend/' . $mode . '_per_page_values_mobile';  
     }else{  
       $perPageConfigKey = 'catalog/frontend/' . $mode . '_per_page_values';  
     }  
     $perPageValues = (string)Mage::getStoreConfig($perPageConfigKey);  
     $perPageValues = explode(',', $perPageValues);  
     $perPageValues = array_combine($perPageValues, $perPageValues);  
     if (Mage::getStoreConfigFlag('catalog/frontend/list_allow_all')) {  
       return ($perPageValues + array('all'=>$this->__('All')));  
     } else {  
       return $perPageValues;  
     }  
   }  
   /**  
    * Get specified products limit display per page  
    *  
    * @return string  
    */  
   public function getLimit()  
   {  
     $limit = $this->_getData('_current_limit');  
     if ($limit) {  
       return $limit;  
     }  
     $limits = $this->getAvailableLimit();  
     $defaultLimit = $this->getDefaultPerPageValue();  
     if (!$defaultLimit || !isset($limits[$defaultLimit])) {  
       $keys = array_keys($limits);  
       $defaultLimit = $keys[0];  
     }  
     $limit = $this->getRequest()->getParam($this->getLimitVarName());  
     if ($limit && isset($limits[$limit])) {  
       if ($limit == $defaultLimit) {  
         Mage::getSingleton('catalog/session')->unsLimitPage();  
       } else {  
         $this->_memorizeParam('limit_page', $limit);  
       }  
     } else {  
       $limit = Mage::getSingleton('catalog/session')->getLimitPage();  
     }  
     if (!$limit || !isset($limits[$limit])) {  
       $limit = $defaultLimit;  
     }  
     $this->setData('_current_limit', $limit);  
     return $limit;  
   }  
   /**  
    * Retrieve Limit Pager URL  
    *  
    * @param int $limit  
    * @return string  
    */  
   public function getLimitUrl($limit)  
   {  
     return $this->getPagerUrl(array(  
       $this->getLimitVarName() => $limit,  
       $this->getPageVarName() => null  
     ));  
   }  
   public function isLimitCurrent($limit)  
   {  
     return $limit == $this->getLimit();  
   }  
   public function getFirstNum()  
   {  
     $collection = $this->getCollection();  
     return $collection->getPageSize()*($collection->getCurPage()-1)+1;  
   }  
   public function getLastNum()  
   {  
     $collection = $this->getCollection();  
     return $collection->getPageSize()*($collection->getCurPage()-1)+$collection->count();  
   }  
   public function getTotalNum()  
   {  
     return $this->getCollection()->getSize();  
   }  
   public function isFirstPage()  
   {  
     return $this->getCollection()->getCurPage() == 1;  
   }  
   public function getLastPageNum()  
   {  
     return $this->getCollection()->getLastPageNumber();  
   }  
   /**  
    * Render pagination HTML  
    *  
    * @return string  
    */  
   public function getPagerHtml()  
   {  
     $pagerBlock = $this->getChild('product_list_toolbar_pager');  
     if ($pagerBlock instanceof Varien_Object) {  
       /* @var $pagerBlock Mage_Page_Block_Html_Pager */  
       $pagerBlock->setAvailableLimit($this->getAvailableLimit());  
       $pagerBlock->setUseContainer(false)  
         ->setShowPerPage(false)  
         ->setShowAmounts(false)  
         ->setLimitVarName($this->getLimitVarName())  
         ->setPageVarName($this->getPageVarName())  
         ->setLimit($this->getLimit())  
         ->setFrameLength(Mage::getStoreConfig('design/pagination/pagination_frame'))  
         ->setJump(Mage::getStoreConfig('design/pagination/pagination_frame_skip'))  
         ->setCollection($this->getCollection());  
       return $pagerBlock->toHtml();  
     }  
     return '';  
   }  
 }  

Không có nhận xét nào:

Đăng nhận xét

About me

Recent

recentposts

Random

randomposts