Переменные CMS OpenCart

 

В данном посте я поделюсь знаниями полученными непосильным трудом при верстки многочисленных шаблонов под CMS OpenCart. Я расскажу, о переменных CMS OpenCart, о переменных которые используют шаблоны (файлы .tpl). Документация для данной системы скудна, в ней вы не найдете ничего подобного, форумы и сообщества почему-то тоже не располагают данной информацией. А напрасно, ведь при каждой разработке своего шаблона  приходится погружаться в код default и разбираться какая переменная за что отвечает. Пользуйтесь данным материалом как справочником при верстки своих шаблонов.

book_marks

Переменные начинающиеся с «text_»

 

Все переменные в шаблонах начинающихся с приставки text_ (например text_information) содержат просто текст, их значения хранятся в языковых файлах, т.е. в директории /catalog/language/russian/имя_папки_с_представлением/имя_файла_представления.

Например в /catalog/language/russian/common/header.php содержится значение переменных «text_…» для файла представления header.tpl. Как пример, создадим переменную в данном языковом файле с именем «text_account«, задаются они так:

Мы присвоили переменной текстовую строку.

В контроллере catalog\controller\common\header.php в теле функции index() (в любом месте)  необходимо подключить данный языковой файл, т.е. добавить следующую команду:

И инициализировать переменную, которая будет доступна в файле представлении. Добавляем данную команду после предыдущей  также в любом месте в теле функции  index()

Теперь в header.tpl  видна переменная $text_account и при печати

мы увидим ее содержимое, т.е. строку «Личный Кабинет«.

 

 

Переменные доступные в в header.tpl

 

  1. $title название магазина, значение его задается в Система>Настройки далее вкладка витрина поле «Заголовок»1
  2. $base url адрес сайта, если на локальном сервере то это значение равно http://localhost/
  3. $descriptionописание документа, обычно располагается в тэге <meta name=»description» …>, значение задается в витрине.2
  4. $keywords – нет настроек через админ панель (OpenCart v. 1.5.4), есть модули добавляющие данную возможность, переменная пуста
  5. $og_urlurl адрес текущей страницы, значение переменной формируется автоматически (c версии ocStore 1.5.4.1.1)
  6. $logo url адрес логотипа, который указывается в вкладке «изображения» — логотип3
  7. $nameназвание магазина, обычно располагается возле логотипа в шапке сайта4
  8. $iconurl адрес иконки, указывается в вкладке «изображения» — иконка. Как правило используется в <link href=»…» rel=»icon» /> в <head> </head> страницы, т.е. задает иконку веб сайта при поисковой выдачи.
  9. $links — пустой массив переменных, нигде не задается (OpenCart v 1.5.4)
  10. $styles — пустой двумерный массив переменных :  $style[‘rel’] – тип стиля и $style[‘href’] – ссылка на стиль. Нигде не задается (OpenCart 1.5.4)
  11. $script – массив содержащий ссылку на скрипт catalog/view/javascript/jquery/jquery.cycle.js. В админ-панели нигде адрес на  скрипты не задается (OpenCart 1.5.4)
  12. $google_analytics – переменная содержащая текст счетчика от Google, код счетчика вводиться на вкладки «Сервер»5
  13. $home – переменная содержащая ссылку на главную страницу, например для локального сервера ее значение будет следующее «http://s-engineer.ru/index.php?route=common/home». В админ-панели не задается.
  14. $language – переменная содержащая html код модуля module/language, если ее напечатать в веб страницу мы получим:6Картинки в браузере кликабельные, при нажатие изменяется язык  (содержимое переменных text_…). В базовом стиле модуля module/language курсор не изменяется при наведение на ссылки, что не есть хорошо,  добавлять стиль к данным ссылкам придется в своем .css файле)
  15. $currency — переменная содержащая html код модуля module/currency, если ее напечатать в веб страницу мы получим:7Картинки в браузере кликабельные, при нажатие изменяется выводимая цена товара. Цена задается в Каталог->Товары в валюте по умолчанию, валюта по умолчанию устанавливается в Система->Локализация->Валюта, остальным валютам прописывается их курс от одной еденицы валюты по умолчанию (почему-то в OpenCart таким образом валюта по умолчанию не изменяется, ошибка разработчиков?)В базовом стиле модуля module/currency курсор не изменяется при наведение на ссылки, что не есть хорошо, добавлять стиль к данным ссылкам придется в своем .css файле)
  16. $cart – переменная содержащая html код модуля module/cart, если ее напечатать в веб страницу мы получим:8Есть подводный камень, html код модуля cart состоит из двух частей, первая это div с классом heading  (Корзина покупок Товаров: 0 ($0.00)) и вторая часть это div с классом content (Ничего не куплено!). Вторая часть в default шаблоне отключена в его css файле

    В нашем шаблоне сделать стоит также. На «Товаров: 0 ($0.00)» установлен обработчик событий по клику (на элемент «#cart > .heading a»), обработчик устанавливается в скрипте «catalog/view/javascript/common.js». При клике раскрывается отдельное окошко с содержимым корзины, если мы хотим сохранить такую функциональность в нашем шаблоне то нам необходимо подключить скрипты Jquery и common.js.

    А в нашем css файле добавить следующее:

    При нажатие раскрывающиеся окошко каждый раз заново заполняется html содержимым модуля module/cart.
  17. $filter_name — по умолчанию пустая (?)
  18. $logged — Переменная служит для определение зашел пользователь или нет, true или false.
  19. $text_welcome – приглашение войти или зарегистрироваться. Переменная со значением из языкового файла catalog\language\russian\common\header.php:

    Где вместо первой %s выводиться ссылка на шаблон «ccount/login», а вместо второй %s ссылка на шаблон «account/register».  Ссылки формирует контроллером header. При выводе в веб документ, выглядит это так:9
  20. $text_logged – сообщение вместо text_welcome для пользователей которые уже зашли в свой аккаунт, это приглашение выйти из него. Переменная со значением из языкового файла catalog\language\russian\common\header.php:

    Вместо первой %s выводиться имя пользователя, а вместо второй %s ссылка на шаблон «account/logout».
    Ссылки формирует контроллером header. При выводе в веб документ, выглядит это так:10Вместо прямоугольника логин пользователя.
  21. $wishlist – переменная содержит ссылку на шаблон account/wishlist (закладки)
  22. $account – переменная содержит ссылку на шаблон account/account (личный кабинет аккаунта)
  23. $shopping_cart — переменная содержит ссылку на шаблон checkout/cart (корзина)
  24. $checkout — переменная содержит текст – ссылку на шаблон checkout/checkout (оформление заказа).  Если корзина  пуста,  шаблон checkout перенаправляет на шаблон cart
  25. $categories – многомерный массив, состоит из следующих элементов $categories[$i][‘href’], $categories[$i][‘name’], $categories[$i][‘active’] и т.д. Где $i это индекс переменная характеризующею порядковый номер категории. Работают с $categories в default шаблоне следующим образом:

    $category[‘href’] — указывает на ссылку на категорию (на шаблон product/category с нужным параметром)
    $category[‘name’] — имя категории.
    $category[‘active’] — активна категория или нет (почему то пустая)

    Задаются категории в Каталок->Котегории.11

    Категория «Компьютеры» и «Ноутбуки» (подчернкутая, раскрывается при ссылки на нее) имеют подкатегории.

    Получить ссылки и имена подкатегории данной категории можно таким образом

    Где $i это индекс переменная характеризующею некую подкатегория данной категория.

 

Переменные доступные в home.tpl

 

$heading_title – тоже самое что и $title, задается в Система->Настройки далее вкладка витрина поле «Заголовок».12

 

Переменные доступные в footer.tpl

 

  1. $informations — многомерный массив (статьи),  состоит из следующих элементов $informations[$i][‘href’] и $informations[$i][‘title’]. Работают с ними в default шаблоне следующим образом:

    Где
    $information[‘href’] – ссылка на статью (на шаблон information/information с нужным параметром);
    $information[‘title’] – название статьи.
    Обращаться также можно без цикла, зная порядковый номер статьи, например печать ссылки первой статьи.

    В админпанели для работы с статьями необходимо перейти Каталог->Статьи13

  2. $contact – переменная содержит ссылку на шаблон information/contact (контакты)
  3. $return – переменная содержит ссылку на шаблон account/return/insert (обращается к контроллеру return и его функции insert), возврат товара.
  4. $sitemap – переменная содержит ссылку на шаблон information/sitemap (карта сайта, шаблон автоматом выводит все ссылки каталогов, статей и т.п., менять его вряд ли придется)
  5. $voucher – переменная содержит ссылку на шаблон account/voucher (шаблон «подарочный сертификат», служит для посылки на email адрес подарочного сертификата одним покупателем другому покупателю)
  6.  $affiliate – переменная содержит ссылку на шаблон affiliate/account (шаблон «партнерская программа» это форма обратной связи с владельцем магазина (с нами))
  7. $special – переменная содержит ссылку на шаблон product/special (акции, шаблон автоматом формирует список товаров с акциями, менять его вряд ли придется). Для того что бы добавить акцию, необходимо в админпанел нажать «изменить» напротив нужного товара, далее закладка «Акции».14
  8. $account — переменная содержит ссылку на шаблон account/account (личный кабинет аккаунта), данная переменная доступна также и шаблоне header.tpl.
  9. $order — переменная содержит ссылку на шаблон account/order (история заказов, если не выполнен вход то произойдет редирект на шаблон account/login (вход в личный кабинет)).
  10. $wishlist — переменная содержит ссылку на шаблон account/wishlist (закладки, если не выполнен вход то произойдет редирект на шаблон account/login (вход в личный кабинет)).
  11. $newsletter — переменная содержит ссылку на шаблон account/newsletter (рассылка, если не выполнен вход то произойдет редирект на шаблон account/login (вход в личный кабинет)).
  12. $powered – переменная содержит html код, при выводе отображающая следующие15



Буду признателен если вы поделитесь данным постом

Комментарии
  1. Максим пишет:

    Спасибо!

  2. Алексей пишет:

    Очень ценный материал, спасибо.
    Подскажи пожалуйста, а откуда ты сам узнал об этих переменных, ведь вся инфа на англ., перевод что ли заказывал?

  3. admin пишет:

    Информации про OpenCart одинаково мало как в рунете так и в англоязычном интернете. Официальная документация это вообще отдельный разговор, считайте что её нет. И мне это дело так надоело, что я решил сам разобрать всю систему по костям и законспектировать это. Notepad++ плюс OpenCart плюс ВРЕМЯ сделали свое дело.
    На то, что бы собраться с мыслями и написать посты о OpenCart у меня ушло порядка 3 месяцев.

    Алексей, спасибо что читаете мой блог

  4. Джама Султанов пишет:

    Спасибо большое, являюсь большим спецом WordPress , Woocommerce чисто для изучения решил обучиться OC что бы оставаться в «тренде» так сказать, знаете ваша статья очень помогла.

  5. admin пишет:

    Спасибо за комментарий!

  6. Виктор пишет:

    У меня еще вопрос: переменная $categories доступна в header.tpl. Я пытаюсь вставить вывод категорий в home.tpl и мне выдает, что переменная не определена. Видимо, проблема видимости переменной. Я правильно понимаю, что надо в класс ControllerCommonHome прописать то же самое, что и в классе ControllerCommonHeader? Или это как-то по-другому решается?

  7. admin пишет:

    Виктор в точку. Вы все правильно поняли.

  8. Виталий пишет:

    Спасибо вам огромное, очень помогла статья) как новичку, мне нужна была акционная цена в тпл карточки товара, никак не могу вытянуть ее, а тут так все просто оказалось) спасибо за инфу)+ в карму автору)

  9. admin пишет:

    Спасибо Виталий что читаете мой блог =)

  10. Евгений пишет:

    Можно ли получить ссылку на саму категорию? Как это сделать? Допустим я в админ. панели добавил категорию свою. В файле контроллере header.php завел отдельный массив, в который занес категории с помощью GetCategories. Потом в цикле могу извлечь название категории по ключу ‘name’ из элемента массива. А как получить ссылку на неё?

  11. admin пишет:

    Вы также можете и извлечь ссылку на категории в цикле.

    В цикле должно быть так, см. «href»
    $this->data[‘categories’][] = array(
    ‘name’ => $category[‘name’],
    ‘children’ => $children_data,
    ‘column’ => $category[‘column’] ? $category[‘column’] : 1,
    ‘href’ => $this->url->link(‘product/category’, ‘path=’ . $category[‘category_id’])
    );

  12. Виктор пишет:

    Здравствуйте, есть проблема, не поддающаяся моему разуму.
    В каком шаблоне выводится пустая корзина? Я отредактировал cart.tpl по своему сайту, но вот когда я жму удалить товар, летит вся верстка сайта.

  13. admin пишет:

    Добрый день Виктор. Корзина в OpenCart, та еще морока…

    Если вас интересует, у меня есть наработка простой корзины, без регистрацией и прочей лабудой. Только фамилия, телефон, e-mail и кнопку «оформить заказ», я считаю чем меньше посетитель делает телодвижений при оформление заказа тем лучше.

  14. николай пишет:

    Здравствуйте.Делаю сайт на опенкарт по продаже автозапчастей.Установил отдельный модуль со своим каталогом товаров(автозапчасти).И установил модуль корзина быстрый заказ,но проблема в том что при нажатии добавить в корзину (в модуле запчастей)окно с корзиной не всплывает ,а просто добавляет ещё один товар.А товары опенкарта добавляются нормально(всплывает корзина быстрого заказа)Насколько я понимаю нужно прописать джава скрипт модуля корзины быстрого заказа в модуль автозапчастей…
    и вы тут в комментариях писали у вас есть наработка простой корзины…

  15. admin пишет:

    Добрый день Николай! Да корзина есть, я её продаю, в свое время у меня ушло много времени что-бы её сделать. Если вам это интересно, дайте мне знать.

  16. Алексей пишет:

    Просто супер, Ваш тяжёлый труд облегчил многим работу с opencart, спасибо огромное!

  17. admin пишет:

    Спасибо Алексей!

    Это и в правду не легко)

  18. Эл пишет:

    пытаюсь вывести логотип в футере таким образом:
    <img src="» title=»» alt=»» />

    а он выдает ошибку:
    «Notice: Undefined variable:vqmod\vqcache\vq2-catalog_view_theme_klukva_template_common_footer.tpl»

    Что это значит?

  19. admin пишет:

    Добрый день Эл.
    К сожалению, я еще не работал так тесно с vqmod, что-бы дать вам правильный ответ.

    Посмотрите, объявлена ли в контролере переменная $logo, у вас ошибка что не найдена переменная.

  20. Эл пишет:

    комментарий съел функцию ?php echo $logo;?

  21. Sergey пишет:

    Спасибо за статью. Сам сейчас разбираюсь с OpenCart. Впервые столкнулся с этим движком. Уже понял, что документации немного доступно. Это большой минус. Поэтому автор молодец, что делится своими наработками.

    У меня есть такая практическая задача. Нужно на существующем сайте на OpenCart отключить скрипт JavaScript, который делает на сайте снежок. Пробовал в файле скрипта закомментировать код функций. Снежок не идет, но и слайдер с рекламой не показывается.
    Где вообще вызов скриптов прописывается на JavaScript в данном движке?

  22. admin пишет:

    Добрый день Сергей!

    В OpenCart-e в панели администратора нет управления подключаемыми файлами, эти вещи делаются файле шаблоне (catalog\view\theme\mebel-profil\template\common\header.tpl) отвечающий за шапку. По умолчанию (согласно дефолтному шаблону), всегда подключается файл common.js, в нем как раз и находятся функции OpenCart, посмотрите там.

  23. Sergey пишет:

    Спасибо. И с дождиком на java-script разобрался, и со многими другими вещами, реализованными MVC-L тоже разобрался за неделю.
    Теперь могу делать и отдельные страницы с собственными шаблонами и переводом текстовых переменных на разные языки.

    Подскажите еще такую вещь. Допустим, у меня интернет-магазин на OpenCart на двух языках: русском и английском. Мне нужно дать ссылку с русской части сайта/ русских сайтов на интернет-магазин так, чтобы при переходе по этим ссылкам появлялся русский перевод сайта. И наоборот, с англоязычной части сайта / с англоязычных сайтов давать ссылку на интернет-магазин с его англоязычной версией.
    Можно ли это прописать в виде get-запроса в ссылке? Или там есть более хитрые методы решения данной проблемы. Наверняка же многие с подобным сталкиваются, если у них мультиязычный интернет-магазин?

  24. admin пишет:

    Добрый день Сергей.

    Еще раз, вы хотите что-бы в зависимости от ссылки, вы получали русскую или английскую версию сайта?

    Задача интересная, решение я пока не вижу, надо думать.
    Думаю, я могу помочь, но к сожалению Сергей я сейчас сильно перегружен работой, позже.

  25. Sergey K. пишет:

    Спасибо. И с дождиком на java-script разобрался, и со многими другими вещами, реализованными MVC-L тоже разобрался за неделю.
    Теперь могу делать и отдельные страницы с собственными шаблонами и переводом и выводом текстовых переменных на разные языки.

    Подскажите еще такую вещь. Допустим, у меня интернет-магазин на OpenCart на двух языках: русском и английском. Мне нужно дать ссылку с русской части сайта/ русских сайтов на интернет-магазин так, чтобы при переходе по этим ссылкам появлялся русский перевод сайта. И наоборот, с англоязычной части сайта / с англоязычных сайтов давать ссылку на интернет-магазин с его англоязычной версией.
    Можно ли это прописать в виде get-запроса в ссылке? Или там есть более хитрые методы решения данной проблемы. Наверняка же многие с подобным сталкиваются, если у них мультиязычный интернет-магазин?

  26. Сергей пишет:

    Здравствуйте!
    Подскажите, пожалуйста, какая переменная отвечает за вывод цены на странице товар?

  27. Сергей пишет:

    Расширю вопрос, который не совсем верно сформулирован.
    По всей видимости, это $price, однако у меня не получается сделать зависимость стоимости самодельной доставки и этой переменной — доставка её не видит. Вот я и думаю на тему «где же тут порылась собака…».

  28. admin пишет:

    Добрый день Сергей.

    Вы хотите прибавлять стоимость самодельной доставки к стоимости товара, я правильно понимаю?

  29. Артем пишет:

    Здравствуйте! Подскажите, пожалуйста, как можно получить значение валюты по умолчанию.

  30. Артем пишет:

    Уточню. Есть модуль доставки почтой РФ. Но модуль не конвертирует валюту. Знаю, как все это реализовать, но не могу понять, как получить значение курса по умолчанию. Нужно как то вытащить это значение, для дальнейшей обработки. Буду рад помощи.

  31. admin пишет:

    Добрый день Артем!
    По умолчанию которая установлена в CMS?

  32. Артем пишет:

    Admin, да. Локализация -> Валюты. Мне нужно получить значение валюты которую я выбрал по умолчанию.

  33. admin пишет:

    Хм… интересная задача.

    Как это сделать, сразу я не вижу, но могу разобраться. Пока я представляю себе это так: создать собственную функцию в модели, которая будет обращаться в БД и выдавать результат а настройке валюты по умолчанию. В контроллере данная функция будет видна и вы сможете использовать её на свое усмотрение.

    Если интересует, дайте знать и мы спишемся по e-mail.

  34. Артем пишет:

    Admin, задача походу простая, но мои скудные знания в области этого движка малы. Уже думал об вытаскивания значения из БД. Но ведь при смене курса, цены всех товаров пересчитываются, значит такая функция уже реализована, а захламлять код не хочется. Искал эту функцию/переменную но так и не нашел.

    Да, можно списаться по e-mail, конечно если не затруднит, буду рад любой помощи 🙂

  35. Астана пишет:

    спасибо автор за ваш труд!

    хотелось бы продолжения «банкета» )))
    описания функций файла stylesheet.css

  36. admin пишет:

    Спасибо, значит мой труд не напрасен)

    Файл stylesheet.css, это файл с таблицей стилей, честно говоря не знаю как его описывать) там просто применяются те или иные стили к некоторому элементу. Для удобства ориентирования по стилям, я использую «инструмент разработчика» в браузере Google Chrome. F12 запускает его.

  37. Олег пишет:

    Подскажите в файле home.tpl (главная страница)
    Переменные $colum_right (left) и $content_top (bottom)
    В соответствующиз файлах tpl только переменные $modules $module
    Откуда берутся?

  38. admin пишет:

    Добрый день Олег!

    Посмотрите контроллер для home.tpl, т.е. файл C:\WebServers\home\s-engineer.ru\www\catalog\controller\common\home.php. В контроллере описывается откуда берется та или иная информация для переменных.

  39. Taras пишет:

    Добрый день! Подскажите пожалуйста как вывести в order_list.tpl (в админке) название компании (поле ‘company’ из oc_address в БД)

  40. admin пишет:

    Добрый день!

    Данную работу можно разбить на следующие шаги:
    1. Написать свою модель в \admin\model\sale, в ней создать метод public function getCompany(параметры).
    С помощью $this->db->query() выполнить необходимый вам SQL запрос к oc_address в БД.
    Прописать в return, какую информацию вам нужно передать контроллеру.
    2. В контроллере, который использует order_list.tpl, подключить выше созданную модель, с помощью
    $this->load->model(). Далее воспользоваться методом getCompany(параметры), получить от него результат и сформировать переменную $this->data[‘company’].
    3. В файле представление order_list.tpl, в нужном для нас месте пишем echo $company

  41. Maks пишет:

    Как на странице 404 вывести сайдбар с категориями? Пробовал конструкцию из файла category_list.php, она не выводит.

  42. admin пишет:

    Добрый день Макс!

    Свяжитесь со мной по e-mail, я вам написал.


Новое агенство Промолегион в городе Москва

Ваш комментарий


Ответ в цифрах

 
© s-engineer.ru, 2012-2017 | Все права защищены