Привет, буквально вчера познакомился с опенкарт 3 версии, с предыдущими тоже дел не имел. Шаблон магазина стандартная. Нужно вывести категорию товаров сеткой на главной странице. Twig сильно похож на django, поэтому я более менее разобрался с этим, но вот если в джанго я знаю где брать модели и добавить туда что то, то в случае ОС не знаю. Никак туториалов не нашел. я себе представляю решение таким: Создать элемент страницы категорий товаров, так что у каждой категории есть своя картинка и прочее и вставить ее в home page, но не знаю как реализовать, то есть к чему задавать запрос, что б была динамика. Мне это нужно потому что категорий около 18 штук, в меню это не поместить.... Элемент должен включать в себя все эти категории в виде сетки, картинка+название категории Есть шаблон KidBoost , там кажется есть готовое решение, но не хочется 5к отдавать за нее, может кто то помочь с этим? Модулей под 3 версию не нашел подобных.....
ставлю данный элемент кода в common/home.twig HTML: <div class="container"> <div class="row"> <div class="col-lg-12"> <h1 class="text-center">Телефоны</h1> </div> {% for category in categories %} <div class="col-xs-6 col-sm-3"> <div class="category"> <div> <a href="{{ category.href }}"> <img src="{{ category.image }}" class="img-fluid"> </a> </div> <h4>{{ category.name }}</h> </div> </div> {% endfor %} </div> </div> результат - никакой, выводится только "телефоны" Это просто элемент то что я писал на python+django логику типа {{ category.href }} брал из исходников магазин, методом поиска дефолтного меню, там используется подобное, думал попаду таким образом куда надо) Часть кода меню магазина, где отображаются названия категорий: HTML: {% if categories %} <div class="container"> <nav id="menu" class="navbar"> <div class="navbar-header"><span id="category" class="visible-xs">{{ text_category }}</span> <button type="button" class="btn btn-navbar navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse"><i class="fa fa-bars"></i></button> </div> <div class="collapse navbar-collapse navbar-ex1-collapse"> <ul class="nav navbar-nav"> {% for category in categories %} {% if category.children %} <li class="dropdown"><a href="{{ category.href }}" class="dropdown-toggle" data-toggle="dropdown">{{ category.name }}</a> <div class="dropdown-menu"> <div class="dropdown-inner"> {% for children in category.children|batch(category.children|length / category.column|round(1, 'ceil')) %} <ul class="list-unstyled"> {% for child in children %} <li><a href="{{ child.href }}">{{ child.name }}</a></li> {% endfor %} </ul> {% endfor %}</div> <a href="{{ category.href }}" class="see-all">{{ text_all }} {{ category.name }}</a> </div> </li> {% else %} <li><a href="{{ category.href }}">{{ category.name }}</a></li> {% endif %} {% endfor %} </ul> </div> </nav> </div> {% endif %}
В ОК модели - это просто свалка SQL запросов. Чтоб вывести что-то в шаблон, начинать надо с добавления переменной в контроллере (в Джанго это вью), а в модель идти, если в контроллер необходимые данные не приходят. И там уже придётся в модели либо существующий метод отредактировать (и SQL в нём), либо дописать собственный. Теперь смотрите контроллер меню, чтоб понять откуда это берётся. Он здесь: /catalog/controller/common/menu.php
Я посмотрел, так понимаю судя по первым строкам подгружаются модели категорий и продукта. menu.php дальше полез в модель категория, если честно все плохо XD Короче что нужно сделать, что бы добавить сюда картинку категории? Я не вижу здесь ничего такого, но в админке есть изображение категории, либо я не туда смотрю, но по логике вещей такая модель должна существовать с изображением категории category.php Разжуйте мне это как самому чайнику, пожалуйста, с php просто плохо знаком очень
Забудьте о моделях из Джанго, они вас только будут путать! Тут надо просто смотреть на SQL запросы и сопутствующий код (и на поля в базе). В контроллере категории получаются методом getCategories из модели. В модели смотрим на SQL и видим, что этот метод вытягивает всё содержимое из таблиц category и category_description. Если не ошибаюсь, изображение должно быть в таблице category, значит оно есть в полученных данных. Дальше идём смотрим на таблицу category в базе, чтоб узнать название поля с изображением и по этому названию его и вытягиваем, аналогично $category['category_id'] (где находится содержимое поля category_id).
Все верно, поле называется просто image, то есть получается что б его вытащить нужно прописывать {{ category.image }}? По сути вот это должно работать да? Я вижу тут такие строки как .child, но в бд ничего подобного нет, как это вообще работает....
Да, но не только. Данные из модели в шаблон напрямую не попадают! Всё идёт через контроллер. Сначала надо добавить поле там, а потом уже его можно будет использовать в шаблоне. Всё в контроллере. В БД таких полей может не быть или они могут иначе называться - это не имеет значения вообще! Всё решает контроллер. Именно в контроллере формируются данные для шаблона, не в модели!
Это я понял уже, после многих попыток как то это сделать) Дело в том , что я плохо читаю php, даже очень плохо, то есть улавливать простую логику не могу, где начало где конец, опыт - начало этой темы xD А вот то что допустим есть соответствующий контроллер продукту или категориям, оттуда подрубается все во фронт через {{ }}, получается в них прописано соответствие? то есть контроллер категорий может подрубиться только в category.twig и тд? И вот допустим моя проблема, нужно просто вытащить с бд данные category_id, name, image, url, id я так понимаю нужен что бы была закономерность айди категории - ее картинка - ее название. Как это все дело прописать если создавать новый контроллер? Или если такое возможно, то использовать тот же контроллер? Контроллер по дефолту содержит кучу всего непонятного, ну для меня....
Процесс обработки запроса идёт так: сначала вызывается контроллер, дальше он вызывает методы разных моделей, чтоб получить необходимые ему данные, как-то эти данные обрабатывает при необходимости, а затем заносит в массив, который затем передаёт в шаблон. Так же контроллер может вызывать другие контроллеры и получать оттуда уже готовые куски шаблона. Отдельный контроллер нужен только в двух случаях: либо для приёма внешних запросов (из браузера), либо для многократного использования кода (модули). Если вам нужно вывести категории только на главной, можете всё делать в контроллере главной страницы. Просто в ОК туго с DRY поэтому в контроллерах процентов 80 кода можно было бы вынести отдельно, а не повторять в каждом. Смотрите контроллер меню, там есть пример.
Короче методом тыка и по подобию модуля для 2.3 сделал свой на 3, в целом не многое там вроде пришлось менять, tpl перекодил на твиг, некотоорые токены подругому вписал, пути и тд Он даже появился в админке xD Но в макете я его вывести не могу Создал вьюхи, контроллеры отдельные, русификацию для admin и catalog, модели использовал продукта и категорий В админке оно появилось в модулях, даже активировалось, но нет отображения в макете дизайна, что нужно сделать с этим? Могу отослать все файлы модуля, если нужно
Я все посмотрел, вроде как, код плохо понимаю, меня направили на эти строчки, по поводу вывода модуля в дизайн - макеты: PHP: if (isset($this->request->post['module_categorywall_status'])) { $data['module_categorywall_status'] = $this->request->post['module_categorywall_status']; } else { $data['module_categorywall_status'] = $this->config->get('module_categorywall_status'); } не помогло, на шару пытался и вписать просто категоривол_статус и с приставкой модуль, я вообще сам думал, что есть отдельные моменты по поводу вывода модуля в дизайн-макеты, очень сомнительно что это делалось бы в 2 строчки, да и строчки эти мне ничего не напоминают из этого ряда, исключительно интуитивно)
А как это прокомментировали? По идее, эти строки взяты где-то из контроллера модуля в админке и отвечают за вывод в админке опции выключателя модуля. Непосредственно к выводу модуля они отношения не имеют. Я третью версию ОК ещё не ковырял, так что не знаю, что там изменилось с выводом в макеты.
прямо и сказали прописать эти строки, но я их и сам прописывал, мол в в3 эти строчки добавляют тип дополнения. На данный момент имею: модуль есть в админке, активируется, но статус висит отключен, хотя многие активные модули с таким статусом. По сути выводится должен через дизайн - макеты, но модуля там нет, я могу все исходные файлы сюда отослать, если так можно делать
тему можно закрыть, проблема решена, спасибо Dotrox, так и не понял как тут оставить благодарность, наверное сообщений или чего не хватает К сожалению до финиша не довел, взял модуль за 300 рублей, но если вы чуть чуть шарите в php, то исходя из данных в этой теме, думаю, сможете сделать сами У меня в php нет знаний, тк работаю с другим языком