Бренды на главной - лимит

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

undermi
undermi
Репутация: 1
Сообщения: 17
Зарегистрирован: 18.08.2017
С нами: 6 лет 7 месяцев

Сообщение #1 undermi » 12.12.2017, 17:25

Вывод брендов на главной. Пишу

Код: Выделить всё

{get_brands var=all_brands limit=6}


Не работает. Почему?

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #2 korshunov » 13.12.2017, 05:49

Потому что в API не предусмотрен этот параметр.
Если требуется, надо дорабатывать.

makki M
makki M
Репутация: 199
Сообщения: 697
Зарегистрирован: 12.08.2016
С нами: 7 лет 7 месяцев
Откуда: Киев
Сайт

Сообщение #3 makki » 15.12.2017, 19:04

В файле api/Brands.php
1) после строки

Код: Выделить всё

public function get_brands($filter = array()) {

добавьте

Код: Выделить всё

$sql_limit = '';


2) после

Код: Выделить всё

$features_filter = '';

добавьте

Код: Выделить всё

        if(isset($filter['limit'])) {
            $limit = max(1, intval($filter['limit']));
            $sql_limit = $this->db->placehold(' LIMIT ?', $limit);
        }


3) в той же функции get_brands в конце в sql запросе после

Код: Выделить всё

ORDER BY b.position

добавьте

Код: Выделить всё

$sql_limit
Последний раз редактировалось makki 21.12.2017, 06:43, всего редактировалось 2 раза.
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #4 korshunov » 16.12.2017, 06:29

Решение - не слишком хорошее.

Ошибка мелкая - довольно давно уже ( по крайней мере в версии 2.0.0), нет фрагмента, указанного в п.3.
Ошибка серьезная - в текущем виде админ сайта получит сюрприз - если у него более 20 брендов, то в админке он их не сможет увидеть в принципе. И разные прочие связанные с этим сюрпризы могут быть - например, на сайте список производителей в фильтре может оказаться неполным...

Вообще разработчиками в админке бренды реализованы своеобразно - у них нет обычного разделения на страницы, это нелогично и иногда бывает неудобно...

makki M
makki M
Репутация: 199
Сообщения: 697
Зарегистрирован: 12.08.2016
С нами: 7 лет 7 месяцев
Откуда: Киев
Сайт

Сообщение #5 makki » 16.12.2017, 08:30

Спасибо, korshunov. Я исправил решение в посте выше, теперь не должно быть проблем.
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)

makki M
makki M
Репутация: 199
Сообщения: 697
Зарегистрирован: 12.08.2016
С нами: 7 лет 7 месяцев
Откуда: Киев
Сайт

Сообщение #6 makki » 20.12.2017, 17:28

Если помимо ограничения количества брендов на главной, нужно еще и случайный вывод, решение будет выглядеть так:
В файле api/Brands.php
1) В public function get_brands, после строки

Код: Выделить всё

$features_filter = '';

добавьте

Код: Выделить всё

      $sql_limit = '';
        $order = 'b.position';
       
        if(isset($filter['limit'])) {
            $limit = max(1, intval($filter['limit']));
            $sql_limit = $this->db->placehold(' LIMIT ?', $limit);
        }
        if(!empty($filter['sort'])) {
            switch ($filter['sort']) {
               case 'position':
                    $order = 'p.position';
                    break;
                case 'rand':
                    $order = 'RAND()';
                    break;
            }
        }


2) в той же функции get_brands в конце в sql запросе
вместо

Код: Выделить всё

ORDER BY b.position

пишем

Код: Выделить всё

            ORDER BY $order
            $sql_limit


Теперь, если в файле main.tpl например написать

Код: Выделить всё

{get_brands var=all_brands visible_brand=1 limit=8 sort=rand}

на главной будут выводиться 8 случайных брендов из тех, которые в админке отмечены как видимые.
Последний раз редактировалось makki 21.12.2017, 06:46, всего редактировалось 2 раза.
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #7 korshunov » 21.12.2017, 05:57

Это все для какой версии? В нескольких последних версиях не встречается в указанном файле упоминаемое b.name.

makki M
makki M
Репутация: 199
Сообщения: 697
Зарегистрирован: 12.08.2016
С нами: 7 лет 7 месяцев
Откуда: Киев
Сайт

Сообщение #8 makki » 21.12.2017, 06:47

korshunov писал(а):Это все для какой версии? В нескольких последних версиях не встречается в указанном файле упоминаемое b.name.
У меня были свои правки в этом файле api/brands.php. Исправил обе инструкции. Совместимость OkaCMS 2.0 и выше )
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)


Название раздела: Вопросы по работе с OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Вопросы по работе с OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 30 гостей