**** ДЕЛАЙТЕ БЕКАПЫ ПЕРЕД ЛЮБЫМИ ИЗМЕНЕНИЯМИ !!!*******
**** Сохраняйте файлы в UTF-8 без BOM чтобы не было кракозябр!!! *******
Достали меня дефолтный выпадающий список и внешний вид пагинации, и наконец то до них дошли руки.
Поделочка делалась по горячему для небольшого собственного магазина, в продакшн на большой проект буду ее допиливать вылизывать, поэтому про конструкции MVC пока что было забыто, но может кому сгодится.
Получилось вот такое:
Вся эта петрушка отображается только если товаров у вас больше минимального значения вывода на страницу установленного в амдинке магазина. (если товаров 25, а у вас стоит лимит в 30 - то панель просто не отображается).
Слева упихал пагинацию и убрал из нее перейти в конец перейти в начало, потому что у меня нет столько товаров в категориях чтобы они были нужны.
Убрал информацию о кол-ве отображаемых и общем количестве товаров (косметически)
Сортировку освободил от уз выпадающего списка и сделал в виде трех кликабельных блоков (при первом клике идет прямая сортировка и блок становится активным, при повторном клике по блоку отображается обратная сортировка).
Вставил проверку кол-ва элементов вывода (т.е. если у вас товаров меньше 60 - у вас не будет 90 и 120 штук к показу).
Подробно попытаюсь описать на примере шаблона категории, остальные шаблоны со списками - включайте мозги дорогие и пилите сами, или же может кто вкумод удосужится соорудить.Кроме css - файлы приложил, не загружался tpl - переименовал его в tpl.php/
Итак по порядку
1. Идем в админку и смотрим сколько у нас там товаров для вывода по дефолту. Я себе поставил 30.
2. Откываем catalog/controller/category.php
находим там вот такие строки
$this->data['limits'] = array();
$this->data['limits'][] = array(
'text' => $this->config->get('config_catalog_limit'),
'value' => $this->config->get('config_catalog_limit'),
'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&limit=' . $this->config->get('config_catalog_limit'))
);
$this->data['limits'][] = array(
'text' => 25,
'value' => 25,
'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&limit=25')
);
$this->data['limits'][] = array(
'text' => 50,
'value' => 50,
'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&limit=50')
);
$this->data['limits'][] = array(
'text' => 75,
'value' => 75,
'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&limit=75')
);
$this->data['limits'][] = array(
'text' => 100,
'value' => 100,
'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&limit=100')
);
$url = '';
И либо убираем либо комментируем ненужное и меняем если надо шаг.я для себя сделал вот так:
$this->data['limits'] = array();
$this->data['limits'][] = array(
'text' => $this->config->get('config_catalog_limit'),
'value' => $this->config->get('config_catalog_limit'),
'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&limit=' . $this->config->get('config_catalog_limit'))
);
/* $this->data['limits'][] = array(
'text' => 30,
'value' => 30,
'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&limit=30')
);*/
$this->data['limits'][] = array(
'text' => 60,
'value' => 60,
'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&limit=60')
);
$this->data['limits'][] = array(
'text' => 90,
'value' => 90,
'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&limit=90')
);
$this->data['limits'][] = array(
'text' => 120,
'value' => 120,
'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&limit=120')
);
$url = '';
Первый шаг я закомментировал, потому что он у меня совпадает со значением по дефолту.
Дальше где то в районе 340 строки
после
$this->data['pagination'] = $pagination->render();
добавляем
$this->data['product_total'] = $product_total;
Нам нужно передать общее кол-во товаров из для того чтобы включать отключать панель, когда при выводе у вас товаров меньше минимального лимита.
С контроллером закончили...
Теперь берем шаблон категории..
catalogviewthemedefaulttemplateproductcategory.tpl
И добавляем в него
<?php if ($product_total>30) { ?>
<div class="product-filter">
<div class="display"><b><?php echo $text_display; ?></b> <?php echo $text_list; ?> <b>/</b> <a onclick="display('grid');"><?php echo $text_grid; ?></a></div>
<div class="pagination"><?php echo $pagination; ?></div>
<div class="limit">
<ul>
<li><?php echo $text_limit; ?></li>
<?php foreach ($limits as $limites) { ?>
<li>
<?php if ($limites['value'] == $limit) { ?>
<span class="active"><?php echo $limites['text']; ?></a></span>
<?php } else { ?>
<a href="<?php echo $limites['href']; ?>"><?php echo $limites['text']; ?></a>
<?php } ?>
</li>
<?php if ($product_total < (int)$limites['value']) break; ?>
<?php } ?>
</ul>
</div>
<div class="sort">
<ul>
<li>
Сортировать по:
</li>
<li>
<span <?php if (($sorts[1]['value'] == $sort . '-' . $order) or ($sorts[2]['value'] == $sort . '-' . $order)) { ?><?php echo 'class="active"'; ?><?php } ?>><a href="<?php if ($sorts[1]['value'] == $sort . '-' . $order) echo $sorts[2]['href']; else echo $sorts[1]['href']; ?>">названию</a></span>
</li>
<li >
<span <?php if (($sorts[3]['value'] == $sort . '-' . $order) or ($sorts[4]['value'] == $sort . '-' . $order)) { ?><?php echo 'class="active"'; ?><?php } ?>><a href="<?php if ($sorts[3]['value'] == $sort . '-' . $order) echo $sorts[4]['href']; else echo $sorts[3]['href']; ?>">цене</a></span>
</li>
<li >
<span <?php if (($sorts[5]['value'] == $sort . '-' . $order) or ($sorts[6]['value'] == $sort . '-' . $order)) { ?><?php echo 'class="active"'; ?><?php } ?>><a href="<?php if ($sorts[5]['value'] == $sort . '-' . $order) echo $sorts[6]['href']; else echo $sorts[5]['href']; ?>">рейтингу</a></span>
</li>
</ul>
</div>
</div>
<?php } ?>
Вместо
<div class="product-filter">
<div class="display"><b><?php echo $text_display; ?></b> <?php echo $text_list; ?> <b>/</b> <a onclick="display('grid');"><?php echo $text_grid; ?></a></div>
<div class="limit"><b><?php echo $text_limit; ?></b>
<select onchange="location = this.value;">
<?php foreach ($limits as $limits) { ?>
<?php if ($limits['value'] == $limit) { ?>
<option value="<?php echo $limits['href']; ?>" selected="selected"><?php echo $limits['text']; ?></option>
<?php } else { ?>
<option value="<?php echo $limits['href']; ?>"><?php echo $limits['text']; ?></option>
<?php } ?>
<?php } ?>
</select>
</div>
<div class="sort"><b><?php echo $text_sort; ?></b>
<select onchange="location = this.value;">
<?php foreach ($sorts as $sorts) { ?>
<?php if ($sorts['value'] == $sort . '-' . $order) { ?>
<option value="<?php echo $sorts['href']; ?>" selected="selected"><?php echo $sorts['text']; ?></option>
<?php } else { ?>
<option value="<?php echo $sorts['href']; ?>"><?php echo $sorts['text']; ?></option>
<?php } ?>
<?php } ?>
</select>
</div>
</div>
Удаляем полностью
<div class="pagination"><?php echo $pagination; ?></div>
И все почти готово.
Осталось немного подправить контроллер пагинации (Это не обязательное действие и если вас устраивают обычные стрелочки-елочки, можете его не трогать)
я просто в нем заккоментировал две строки и поменял вид стрелок.
вот такой вот у меня в итоге получился код в systemlibrarypagination.php
public $total = 0;
public $page = 1;
public $limit = 20;
public $num_links = 5;
public $url = '';
public $text = 'Showing {start} to {end} of {total} ({pages} Pages)';
//public $text_first = '|<';
public $text_first = '';
//public $text_last = '>|';
public $text_last = '';
public $text_next = '→';
public $text_prev = '←';
public $style_links = 'links';
public $style_results = 'results';
По хорошему его надо повырезать ниже, но меня такое решение устроило.
и в catalogviewthemedefaultstylesheetstylesheet.css
добавляем немножко стилей
.sort ul li, .limit ul li {display: inline-block; color: #777; margin: 0 3px; font-size: 10px;}
.sort ul li a, .limit ul li a {color: #222; font-size:11px;}
.sort ul li a:hover, .limit ul li a:hover {text-decoration: none;}
.sort ul li .active, .limit ul li .active {background: #ccc; padding: 1px 4px; color: black; font-weight: bold;}
.sort ul li .active a, .limit ul li .active a{text-decoration: none;}
.sort ul a {text-decoration: none;}
И правим стили пагинации.
.pagination {border-top:1px solid #EEE; padding-top:0; display: inline-block; width: 250px; margin-bottom:10px; float: left; margin-left: 10px;}
.pagination .links {float: left;}
.pagination .links a {display: inline-block; padding: 0px 3px; text-decoration: none; color: #A3A3A3;}
.pagination .links b {display: inline-block; padding: 0px 3px; background: #AAA; padding: 1px 4px; color: black; font-weight: bold;}
.pagination .results {display:none; float: right; padding-top: 3px;}
По моему ничего не забыл.
UPD №1: Рекомендации по установке проверены, все работает, если вам что то непонятно - задайте вопрос в ветке, не спамьте личку. Поделочка делалась для себя. Выложил As is. Поддержки и багфикса пока не планируется. С просьбами о допилах и помощи в установке - добро пожаловать в платный раздел.
UPD №2: Файлы приложены для ознакомления и выявления расхождений. Использовать для интеграции не рекомендую, потому что уже не помню сам что в них перепилено было.
UPD №3: Если кто прикрутит на чистую установку и выложит файлы для накатки - будет очень неплохо. Не жмите поделитесь.
category.php
category.tpl.php
pagination.php