Производители (manufacturers)

Тема в разделе "PrestaShop", создана пользователем sergiykhd, 17 окт 2015.

Информация :
Хочешь в разделе без проблем общаться - прочти правила, чтобы потом с форумом на время не прощаться. Читать обязательно!
Внимание! Читайте внимательно правила!Предупреждения выдаются без всяких вопросов. Нарушил - получил. Будьте Внимательнее! Постинг нескольких постов подряд приравнивается к НАРУШЕНИЮ! Будьте вежливы и соблюдайте правила ;-)
Модераторы: ZiX
  1. sergiykhd

    sergiykhd Sergiy

    Регистр.:
    17 апр 2013
    Сообщения:
    496
    Симпатии:
    190
    Ищу готовое решение для отображения производителей в алфавитном порядке. Примерно как на фото...
     

    Вложения:

  2. joinpink

    joinpink Создатель

    Регистр.:
    14 мар 2012
    Сообщения:
    48
    Симпатии:
    15
    Вот тут: skinline.ru http://take.ms/44770 делал на js.
    Довольно просто мне кажется придумал (script.js), но давно это было:
    То есть пробегал по списку просто и к впервые встречающейся букве делал подпись
    Код:
    var letters = [];
        $('#showman li').each(function(){
    
            var letter = $(this).find('a').text()[0];
    
            if($.inArray(letter,letters) == -1)
            {
                letters.push(letter);
                $(this).find('span').html(letter);
            }
        });
     
  3. sergiykhd

    sergiykhd Sergiy

    Регистр.:
    17 апр 2013
    Сообщения:
    496
    Симпатии:
    190
    как реализовал
    1. В файле настраиваем количество отображаемых производителей
    controllers/front/ManufacturerController.php

    меняем
    $this->n = abs((int)Tools::getValue('n', Configuration::get('PS_PRODUCTS_PER_PAGE')));
    на
    $this->n = abs((int)(Tools::getValue('n', 99)));

    2. В файле themes/....../manufacturer-list.tpl меняем следующий кусок:

    <ul id="manufacturers_list" class="clearfix">
    {foreach from=$manufacturers item=manufacturer name=manufacturers}
    {if !isset($currentLetter)}
    {$currentLetter = $manufacturer.name|substr:0:1}
    <li class="alphabetical"><h3>{if in_array($currentLetter, array(0,1,2,3,4,5,6,7,8,9))}0-9{else}{$manufacturer.name|substr:0:1}{/if}</h3></li>
    {else if isset($currentLetter) && $currentLetter != $manufacturer.name|substr:0:1 && (string)($manufacturer.name|substr:0:1) != (string)((int)($manufacturer.name|substr:0:1))}
    {$currentLetter = $manufacturer.name|substr:0:1}
    <li class="alphabetical"><h3>{$manufacturer.name|substr:0:1}</h3></li>
    {/if}
    <li class="clearfix {if $smarty.foreach.manufacturers.first}first_item{elseif $smarty.foreach.manufacturers.last}last_item{else}item{/if}">
    <div class="left_side">
    <!-- name -->
    <h5>
    {if $manufacturer.nb_products > 0}<a href="{$link->getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)|escape:'html'}">{/if}
    {$manufacturer.name|truncate:60:'...'|escape:'html'}
    {if $manufacturer.nb_products > 0}</a>{/if}
    </h5>
    </div>
    </li>
    {/foreach}
    </ul>

    3. меняем под себя стили в файле themes/...../css/global.css поля manufacturer_list
     
  4. romeo143

    romeo143

    Регистр.:
    15 авг 2015
    Сообщения:
    151
    Симпатии:
    29
    Я реализовал это таким образом (не без помощи интернета конечно)
    В файле manufacturer-list.tpl по такому принципу
    Код:
    <h4><a href="http://site.ru/index.php?controller=manufacturer&filter=A">A</a> - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z</h4>
    В файле контроллера добавил
    Код:
        $filter = $_GET["filter"];          //get url parameter
                   $indic = 0;
                   if ($filter<>""){
                    foreach ($data as &$item){
                     if ( (substr($item['name'],0,1))<>$filter){ //compare initial with filter option
                     unset($data[$indic]); //delete item
                     }
                    $indic = $indic + 1;
                    }
                   }
                   $data = array_values($data); //reindex array
    Между этими строками
    Код:
    $this->pagination($nbProducts);       
    ......
    .....
    ....
    foreach ($data as &$item)
                    $item['image'] =
     
  5. romeo143

    romeo143

    Регистр.:
    15 авг 2015
    Сообщения:
    151
    Симпатии:
    29
    Блин, написал код, и он срабатывает только на первую букву А, а на остальные буквы выдает 0. Не подскажете в чем проблема?
     
  6. sergiykhd

    sergiykhd Sergiy

    Регистр.:
    17 апр 2013
    Сообщения:
    496
    Симпатии:
    190
    делали по какому способу?
     
  7. romeo143

    romeo143

    Регистр.:
    15 авг 2015
    Сообщения:
    151
    Симпатии:
    29
    Вот ссылка на инструкцию, но вместо filtro я заменял filter иначе ничего бы не работало вообще
    http://hackingjoomla.blogspot.ru/2013/07/create-alphabetical-index-on-prestashop.html

    У меня на сайте 26000 Производителей:) Поэтому хочу добиться именно вывод по буквам, а еще лучше сначала по одной букве, а затем по двум (Пример А -> Ab)

    Нашел сайт с выводом по примерно такому же способу, но у них работает у меня нет:(
    http://www.kartease.com/index.php?controller=manufacturer&letter=@

    В идеале конечно хотелось бы вот такой вывод:
    http://bookbridge.ru/izdatelstva/?lang=477