Автор Тема: Prestashop FAQ - Как добавить поле для выбора количества на странице категории  (Прочитано 12843 раз)

24 Февраль 2017, 12:21:03
Ответ #15
  • Новичок
  • *
  • Сообщений: 7
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Я конечно не силен в JS, но если код вставляю перед " window.location=' '+g;" всё норм работает но добавляет только один товар, если после него. То происходит анимация добавления в корзину и всё равно страница перезагружается, при этом добавляется правильно количества товара. 
24 Февраль 2017, 12:24:35
Ответ #16
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
24 Февраль 2017, 12:33:13
Ответ #17
  • Новичок
  • *
  • Сообщений: 7
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
24 Февраль 2017, 13:13:29
Ответ #18
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
Первый пост для prestashop 1.4. Она совсем не совместима с версией 1.6.
Лучше делать как для prestashop 1.5 - http://prestashop-forum.ru/index.php/topic,3143.msg17179.html#msg17179
24 Февраль 2017, 13:23:10
Ответ #19
  • Новичок
  • *
  • Сообщений: 7
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Первый пост для prestashop 1.4. Она совсем не совместима с версией 1.6.
Лучше делать как для prestashop 1.5 - http://prestashop-forum.ru/index.php/topic,3143.msg17179.html#msg17179
  сделал всё как в этом сообщение, но он добавляет исключительно 1 шт. Хотя в примере для 1,4 добавляло нужное количество, только был минус, сразу перебрасывало на страницу заказа.
24 Февраль 2017, 15:49:51
Ответ #20
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
В javascript добавьте сброс перехода при клике на кнопку
e.preventDefault(); 
В prestashop 1.6 этого делать ненужно, там и так в /themes/default-bootstrap/js/modules/blockcart/ajax-cart.js
//for every 'add' buttons...
$(document).off('click', '.ajax_add_to_cart_button').on('click', '.ajax_add_to_cart_button', function(e){
e.preventDefault();
Все что нужно сделать, это добавить передачу 2-х значений
$('#idCombination_idProduct').val();
$('#quantity_wanted_idProduct').val();
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
24 Февраль 2017, 16:31:36
Ответ #21
  • Новичок
  • *
  • Сообщений: 7
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В javascript добавьте сброс перехода при клике на кнопку
e.preventDefault(); 
В prestashop 1.6 этого делать ненужно, там и так в /themes/default-bootstrap/js/modules/blockcart/ajax-cart.js
//for every 'add' buttons...
$(document).off('click', '.ajax_add_to_cart_button').on('click', '.ajax_add_to_cart_button', function(e){
e.preventDefault();
Все что нужно сделать, это добавить передачу 2-х значений
$('#idCombination_idProduct').val();
$('#quantity_wanted_idProduct').val();
А можете пожалуйста поподробней описать?
13 Сентябрь 2018, 09:27:19
Ответ #22
  • Новичок
  • *
  • Сообщений: 36
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Уважаемые гуру, а для версии 1.7.3 как добавить возможность выбора количества выводимого товара в категории? Чтобы клиент зашел в категорию и имел возможность, оформленного в виде выпадающего списка, выбрать сколько товара выводить на страницу, например, 12, 30, 100, всё.
13 Сентябрь 2018, 12:16:51
Ответ #23
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Также как и для prestashop 1.6, методы те-же. Разница только в темах.
13 Сентябрь 2018, 12:28:31
Ответ #24
  • Новичок
  • *
  • Сообщений: 36
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Так вроде бы не написано, как там в 1.6, есть только 1.5 и не у всех работает, как я понял, а так же файл product-list потерпел изменения в коде с момента выхода 1.5. Видимо, другие файлы теперь править нужно.
13 Сентябрь 2018, 12:45:19
Ответ #25
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Можно в файл /themes/classic/templates/_partials/pagination.tpl добавить форму выбора кол-ва.
13 Сентябрь 2018, 14:21:04
Ответ #26
  • Новичок
  • *
  • Сообщений: 36
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Погуглил, поднапрягся, выкладываю рабочий вариант.

Как добавить выпадающий список для выбора количества товара на странице категории под Prestashop 1.7 (тестил на 1.7.3.3)

  • Редактируем /classes/controller/ProductListingFrontController.php (желательно завернуть в override, чтобы не потерять при обновлении, но мне это не нужно, поэтому я редактирую напрямую)
    Меняем максимальное количество выводимого товара на странице. 36 меняем на свое число.
if ($resultsPerPage <= 0 || $resultsPerPage > 36) {
    $resultsPerPage = Configuration::get('PS_PRODUCTS_PER_PAGE');
}
  • Редактируем /themes/classic/templates/_partials/pagination.tpl
    В начало кода добавляем:
{if !empty($smarty.get.order)}
    {capture assign='ordering'}order={$smarty.get.order}&{/capture}
{else}
    {assign var='ordering' value=''}
{/if}

{if !empty($smarty.get.resultsPerPage)}
    {assign var='results_per_page' value=$smarty.get.resultsPerPage}
{else}
    {assign var='results_per_page' value=25}
{/if}
  • Ищем два <div> с классами col-md-4 и col-md-6, первый редактируем на col-md-3 добавляем между этими двумя дивами свой:
<div class="col-md-3">
        <div class="row sort-by-row align-items-center">
            <span class="col-sm-3 col-md-4 col-lg-5 col-xl-5 sort-by">Товаров на странице:</span>
            <div class="col-sm-9 col-md-8 col-lg-7 col-xl-5 pl-lg-1 products-sort-order dropdown">
                <button class="btn-unstyle select-title" rel="nofollow" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true" style="padding: .375rem;">
                    {* Если нужно вывести выбранное количество
                    {$results_per_page}
                    *}
                    Выбрать <i class="material-icons float-xs-right"></i>
                </button>
                <div class="dropdown-menu">
                    <a rel="nofollow" href="?{$ordering}resultsPerPage=25" class="select-list current js-search-link" style="padding: 0.1rem 1rem;letter-spacing: .05rem;">
                        25
                    </a>
                    <a rel="nofollow" href="?{$ordering}resultsPerPage=50" class="select-list js-search-link" style="padding: 0.1rem 1rem;letter-spacing: .05rem;">
                        50
                    </a>
                    <a rel="nofollow" href="?{$ordering}resultsPerPage=100" class="select-list js-search-link" style="padding: 0.1rem 1rem;letter-spacing: .05rem;">
                        100
                    </a>
                    <a rel="nofollow" href="?{$ordering}resultsPerPage=200" class="select-list js-search-link" style="padding: 0.1rem 1rem;letter-spacing: .05rem;">
                        200
                    </a>
                    <a rel="nofollow" href="?{$ordering}resultsPerPage=500" class="select-list js-search-link" style="padding: 0.1rem 1rem;letter-spacing: .05rem;">
                        500
                    </a>
                </div>
            </div>
        </div>
    </div>
Этот код, скорее всего, вы захотите затем отредактировать, главное, переменные не потеряйте.

  • Если кому то лень проводить вышеописанные операции с файлом pagination.tpl самому, то вот весь мой код файла pagination.tpl с уже прописанной разметкой под мои нужны (шаблон стандартный):
{if !empty($smarty.get.order)}
    {capture assign='ordering'}order={$smarty.get.order}&{/capture}
{else}
    {assign var='ordering' value=''}
{/if}

{if !empty($smarty.get.resultsPerPage)}
    {assign var='results_per_page' value=$smarty.get.resultsPerPage}
{else}
    {assign var='results_per_page' value=25}
{/if}

<nav class="row align-items-center justify-content-center pagination">
  <div class="col-md-5 col-lg-3 col-xl-3 text-center">
    {block name='pagination_summary'}
      {l s='Showing %from%-%to% of %total% item(s)' d='Shop.Theme.Catalog' sprintf=['%from%' => $pagination.items_shown_from ,'%to%' => $pagination.items_shown_to, '%total%' => $pagination.total_items]}
    {/block}
  </div>

    <div class="col-md-3 col-lg-4 col-xl-4 hidden-md-down">
        <div class="row sort-by-row align-items-center">
            <span class="col-sm-3 col-md-4 col-lg-5 col-xl-5 sort-by">Товаров на странице:</span>
            <div class="col-sm-9 col-md-8 col-lg-7 col-xl-5 pl-lg-1 products-sort-order dropdown">
                <button class="btn-unstyle select-title" rel="nofollow" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true" style="padding: .375rem;">
                    {* Если нужно вывести выбранное количество
                    {$results_per_page}
                    *}
                    Выбрать <i class="material-icons float-xs-right"></i>
                </button>
                <div class="dropdown-menu">
                    <a rel="nofollow" href="?{$ordering}resultsPerPage=25" class="select-list current js-search-link" style="padding: 0.1rem 1rem;letter-spacing: .05rem;">
                        25
                    </a>
                    <a rel="nofollow" href="?{$ordering}resultsPerPage=50" class="select-list js-search-link" style="padding: 0.1rem 1rem;letter-spacing: .05rem;">
                        50
                    </a>
                    <a rel="nofollow" href="?{$ordering}resultsPerPage=100" class="select-list js-search-link" style="padding: 0.1rem 1rem;letter-spacing: .05rem;">
                        100
                    </a>
                    <a rel="nofollow" href="?{$ordering}resultsPerPage=200" class="select-list js-search-link" style="padding: 0.1rem 1rem;letter-spacing: .05rem;">
                        200
                    </a>
                    <a rel="nofollow" href="?{$ordering}resultsPerPage=500" class="select-list js-search-link" style="padding: 0.1rem 1rem;letter-spacing: .05rem;">
                        500
                    </a>
                </div>
            </div>
        </div>
    </div>

  <div class="col-md-7 col-lg-5 col-xl-5">
    {block name='pagination_page_list'}
     {if $pagination.should_be_displayed}
        <ul class="page-list clearfix text-sm-center">
          {foreach from=$pagination.pages item="page"}

            <li {if $page.current} class="current" {/if} style="padding: 0.1rem;">
              {if $page.type === 'spacer'}
                <span class="spacer">&hellip;</span>
              {else}
                <a
                  rel="{if $page.type === 'previous'}prev{elseif $page.type === 'next'}next{else}nofollow{/if}"
                  href="{$page.url}"
                  class="{if $page.type === 'previous'}previous {elseif $page.type === 'next'}next {/if}{['disabled' => !$page.clickable, 'js-search-link' => true]|classnames}"
                >
                  {if $page.type === 'previous'}
                    <i class="material-icons">&#xE314;</i>{l s='Previous' d='Shop.Theme.Actions'}
                  {elseif $page.type === 'next'}
                    {l s='Next' d='Shop.Theme.Actions'}<i class="material-icons">&#xE315;</i>
                  {else}
                    {$page.page}
                  {/if}
                </a>
              {/if}
            </li>
          {/foreach}
        </ul>
      {/if}
    {/block}
  </div>
</nav>