2013-05-31 5 views
1

Я создаю модуль для страницы категории в prestashop.Prestashop показать все категории продуктов без разбивки на страницы

В основном в моей module.php у меня есть этот код:

$category = new Category(Context::getContext()->shop->getCategory(),(int)Context::getContext()->language->id); 
    $nb = (int)(Configuration::get('MOD_NBR')); 
    $products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 10)); 

    $this->smarty->assign(array(
     'myproducts' => $products, 
     'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'), 
     'homeSize' => Image::getSize(ImageType::getFormatedName('home')), 
    )); 

Тогда в mymodule.tpl у меня есть это:

{foreach from=$products item=product name=myproducts} 

+ other stuff 

Проблема заключается в том, что мне нужно, чтобы получить все продукты внутри категория, но она отображает только продукты на первой странице. Я не могу полностью удалить или изменять разбиение на страницы, потому что мне нужно, чтобы другие продукты на странице категории были разбиты на страницы, но в моем модуле я хочу получить все продукты сразу (после того, как я их отфильтрую, чтобы показать только некоторые из них) ,

Как вы видите, я бы потерял, но и в таком отчаянии, я буду признателен за любые указания :)

благодаря

ответ

4

В своем коде вы имеете:

$products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 10)); 

, который соответствует чтобы:

/** 
    * Return current category products 
    * 
    * @param integer $id_lang Language ID 
    * @param integer $p Page number 
    * @param integer $n Number of products per page 
    * @param boolean $get_total return the number of results instead of the results themself 
    * @param boolean $active return only active products 
    * @param boolean $random active a random filter for returned products 
    * @param int $random_number_products number of products to return if random is activated 
    * @param boolean $check_access set to false to return all products (even if customer hasn't access) 
    * @return mixed Products or number of products 
    */ 
public function getProducts($id_lang, $p, $n, $order_by = null, $order_way = null, $get_total = false, $active = true, $random = false, $random_number_products = 1, $check_access = true, Context $context = null) 

Так вы просите странице 1 d $nb или 10 элементов. Попробуйте добавить до этой строки $nb = 10000; отображать до 10k продуктов (и не стесняйтесь, чтобы увеличить его, если ваша категория имеет более чем 10k продукты)

Так оно и должно быть что-то вроде:

$category = new Category(Context::getContext()->shop->getCategory(),(int)Context::getContext()->language->id); 
$nb = 10000; 
$products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 10)); 

$this->smarty->assign(array(
    'myproducts' => $products, 
    'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'), 
    'homeSize' => Image::getSize(ImageType::getFormatedName('home')), 
)); 

UPDATE : Рассмотрев ваш вопрос, я обнаружил, что в вашем шаблоне вы повторяете переменную $products, но присваиваете ее как myproducts. Я предполагаю, что smarty имеет назначенные переменные $products с только первой страницей и $myproducts с теми, которые вы получили.

Попробуйте обновить свой шаблон:

{foreach from=$myproducts item=product name=myproducts} 
+0

Спасибо за ответ, я стараюсь, но это не сработало. Я предполагаю, что это потому, что я вставляю его на страницу категории, поэтому он сохраняет эту конфигурацию страницы. Есть ли у вас какая-либо другая идея? благодаря! – lilymz

+0

Я обновил ответ на что-то, что я нашел, перечитывая ваш вопрос, не могли бы вы попробовать, если он сработает? Если он работает, можете ли вы попробовать обновленную часть без первой предложенной модификации? – ipeiro

Смежные вопросы