Я пока нахожусь на стадии активного изучения OpenCart 3.0 Уже разобрался, что для того, чтобы вывести значение той или иной переменной необходимо: 1. В контроллере задать эту переменную 2. В языковом файле (не обязательно) прописать название соответствующего поля для вывода в шаблоне 3. В шаблоне (в коде) вставить те самые переменные, которые прописаны в п.1 и п.2 Понял, что структура папок в контроллере, в языковом файле и в файлах шаблона абсолютно идентична и на этом в opencart всё и построено. У меня пока получалось только (бездумно) вставлять соответствующие (даденные кем-то другим) коды в контроллеры, языковые файлы и фалы шаблона. В бОльшей части всё получалось и срабатывало. А если не срабатывало, то не всегда получалось разобраться почему, потому как логику (порядок работы с переменными) я пока еще не уловил. Можете помочь с этим разобраться? Ну чтобы не скучно было, давайте разберёмся на конкретном примере. Вот, допустим, есть страница производителей. Мне надо, чтобы на странице производителей над наименованием появлялся логотип соответствующего производителя. Я понимаю, что для этого я в файле catalog/view/theme/default/template/product/manufacturer_list.twig строку Код: <div class="col-sm-3"><a href="{{ manufacturer.href }}">{{ manufacturer.name }}</a></div> должен изменить на что-нибудь типа Код: <div class="col-sm-3"><img src="{{ manufacturer.image }}" title="{{ manufacturer.name }}" alt="{{ manufacturer.name }}"><br /><a href="{{ manufacturer.href }}">{{ manufacturer.name }}</a><a href="{{ manufacturer.href }}">{{ manufacturer.name }}</a></div> Здесь мне, в принципе, всё понятно кроме {{ manufacturer.image }} Что именно я должен прописать (я так понимаю в контроллере /catalog/controller/product/manufacturer.php) чтобы OpenCart взял из админки (Каталог - Производители - Конкретный производитель - Изображение) соответствующую ссылку (изображение) и подставил её в эту переменную. Можно в качестве ответа не просто "сделай вот так и всё заработает", а что-нибудь вроде краткого комментария-разъяснения, типа "нужная вам переменная в opencart объявляется вот так-то (здесь код) значения для этой переменной задаются так-то (здесь код). Заранее благодарю за ответ...
С производителями тут просто. Если посмотреть в то место где формируется массив и как прописываются значения и ключи PHP: 'name' => $result['name'], то по логике вещей можно понять, что данные берутся из массива, result А сам result формируется запросом из модели PHP: $results = $this->model_catalog_manufacturer->getManufacturers(); В моделе конечно sql запрос. Сам массив который пришел выглядет так... пример Код: array (size=5) 'manufacturer_id' => string '8' (length=1) 'name' => string 'Apple' (length=5) 'image' => string 'catalog/demo/apple_logo.jpg' (length=27) 'sort_order' => string '0' (length=1) 'store_id' => string '0' (length=1) Посему достаточно добавить PHP: 'image' => $result['image'], и на выходе получите ссылку на фото. Но это конечно для примера, ведь изображение лучше пропускать через ресайз PHP: $this->model_tool_image->resize($result['image'],100,100)
Благодарю за разъяснение. Но, похоже, я что-то недопонял Добавил в контроллере после Код: 'name' => $result['name'], Код: 'image' => $result['image'], Проверил (почистил все кеши) - у меня не сработало. Этого недостаточно? Нужно ещё куда-то (куда именно?) вставить Код: $this->model_tool_image->resize($result['image'],100,100) Вот про это дело (про эту строку) я недопонял. Ну что такое ресайз - догадался, а вот сама строка - сама команда - можно поподробнее. Что именно она делает, и куда именно в коде (в контроллере) её нужно вставлять?
Что проверили? В шаблоне ссылка выводится? В переменной должна быть ссылка из базы. В том же контрллере посмотрите пример... там же есть. Да в любом контроллере это есть.. попробуйте сами догадаться как работает и что делает.
В общем у меня получилось поставить логотипы на страницу производителей. Если кому нужно, вот решение для openCart 3.0 в файл catalog\controller\product\manufacturer.php Код: $data['categories'][$key]['manufacturer'][] = array( 'name' => $result['name'], 'href' => $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $result['manufacturer_id']), ); меняем на Код: $data['categories'][$key]['manufacturer'][] = array( 'name' => $result['name'], 'href' => $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $result['manufacturer_id']), 'logo' => $this->model_tool_image->resize($result['image'], 100, 100), ); т.е. по сути добавляем туда одну строку Код: 'logo' => $this->model_tool_image->resize($result['image'], 100, 100), Ну и, соответственно, в файле catalog\view\theme\default\template\product\manufacturer_list.twig строку Код: <div class="col-sm-3"><a href="{{ manufacturer.href }}">"{{ manufacturer.name }}"</a></div> меняем на Код: <div class="col-sm-3"> {% if manufacturer.logo %} <a href="{{ manufacturer.href }}"><img src="{{ manufacturer.logo }}" alt="{{ manufacturer.name }}" class="img-responsive" /></a> <a href="{{ manufacturer.href }}">"{{ manufacturer.name }}"</a> {% else %} <a href="{{ manufacturer.href }}">"{{ manufacturer.name }}"</a> {% endif %} </div> PROFIT Но вопрос у меня, как видите выше, был совсем в другом. Т.е. почему в данном случае не понадобилась строка Код: 'image' => $result['image'],
Вы ведите две переменные так PHP: 'image' => $result['image'], и так PHP: 'logo' => $this->model_tool_image->resize($result['image'], 100, 100), и увидите, что мало того пути отличаются, так еще и названия файлов разные и соответсвенно и размеры файлов. Суть второй строки, сделать ресайз изображения, ведь если лого у меня 1000*2000 зачем мне такое??
Благодарю за разъяснение. Вам бы преподавателем работать. Или уже где-то преподаёте? ;-) Короче, если ничего с переменной делать не надо, а достаточно достать её из базы и передать в неизменённом виде куда следует, то формат Код: 'test' => $result['test'], а строка Код: 'logo' => $this->model_tool_image->resize($result['image'], 100, 100), это типа то же самое, только "в расширенном формате" - когда переменную, взятую из базы нужно сначала обработать и только потом в обработанном виде отправить дальше по цепочке. Я суть верно уловил? Тогда последний (в этой ветке) вопрос. А вот эти вот "model_tool_image", "resize" и т.д. - это вообще откуда взято? Это к чему относится, к PHP, к OpenCart, к Twig или к чему-то другому?
Ravirl, а подскажите пожалуйста. OC 303 файл admin\view\template\setting\setting.twig, строка 1182 - откуда берётся переменная {{ entry_seo_url }}. В файле контроллера admin\controller\setting\setting.php нет такой конструкции $data['entry_seo_url'] = $this->language->get('entry_seo_url');
model_tool_image - это обращение к модели ModelToolImage находящейся по пути catalog/model/tool/image.php resize - это метод модели ModelToolImage
Из файла перевода \admin\language\ru-ru\setting\setting.php как бы автоматом залетает в шаблон без контроллера. Потому что магия Но если нужно что то свое, то да, можно и так в контроллере PHP: $data['entry_seo_url'] = $this->language->get('entry_seo_url');