Статьи

OXID eSales — платформа электронной коммерции, которая просто работает! Часть 2

В первой части этой серии мы подробно ознакомились с OXID eSales, высококачественным пакетом электронной коммерции, который прост в установке, настройке и расширении. Мы рассмотрели некоторые его особенности и требования, а затем завершили его установку для полностью работающего магазина.

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

Что такое тема?

oxid2-01

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

Тематическая система в OXID использует механизм шаблонов Smarty, который позволяет создавать шаблоны с использованием PHP-подобного синтаксиса, а также полный доступ к ядру PHP при желании.

Ниже приведен фрагмент шаблона header.tpl . В нем вы можете увидеть теги Smarty Template с вкраплениями стандартного HTML. Теги шаблонов, используемые в OXID, представляют собой небольшую вариацию стандартной версии, в которой вместо фигурной скобки используются квадратная и фигурная скобка.

 [{assign var="slogoImg" value="logo.png"}] <a id="logo" href="[{$oViewConf->getHomeLink()}]" title="[{$oxcmp_shop->oxshops__oxtitleprefix->value}]" ><img src="[{$oViewConf->getImageUrl($slogoImg)}]" alt="[{$oxcmp_shop->oxshops__oxtitleprefix->value}]" ></a> [{oxid_include_widget cl="oxwCategoryTree" cnid=$oView->getCategoryId() sWidgetType="header" _parent=$oView->getClassName() nocookie=1}] [{if $oxcmp_basket->getProductsCount()}] [{assign var="blAnon" value=0}] [{assign var="force_sid" value=$oViewConf->getSessionId()}] [{else}] [{assign var="blAnon" value=1}] [{/if}] [{oxid_include_widget cl="oxwMiniBasket" nocookie=$blAnon force_sid=$force_sid}] [{include file="widget/header/search.tpl"}] </div> [{if $oView->getClassName()=='start' && $oView->getBanners()|@count > 0 }] <div class="oxSlider"> [{include file="widget/promoslider.tpl" }] </div> [{/if}] 

Как видно из приведенной ниже таблицы, разницы на самом деле не так много. Если вы уже знакомы с Smarty (или другим языком шаблонов PHP), то вы будете чувствовать себя как дома.

оксидной-t1

OXID также делает доступным ряд пользовательских плагинов, что делает его использование проще и проще. Вы можете найти их с включенными в него Smarty в /core/smarty/plugins . Доступно немало, но я остановлюсь на том, что касается этой серии статей. Если вы хотите узнать больше, я советую вам прочитать исходный код на досуге.

Возвращаясь к шаблонам, во фрагменте шаблона выше вы можете увидеть условную логику и включение других шаблонов. Я немного отформатировал его для удобства чтения. Давайте пройдемся по шаблону, чтобы вы немного лучше поняли, какие части задействованы.

Сначала мы присваиваем logo.png переменной шаблона slogoImg . Затем мы передаем его методу getImageUrl объекта $oViewConf . Это возвращает специфическую для магазина ссылку на запрошенное изображение.

В объекте $oViewConf несколько методов. Эти:

оксидной-t2

 [{assign var="slogoImg" value="logo.png"}] <a id="logo" href="[{$oViewConf->getHomeLink()}]" title="[{$oxcmp_shop->oxshops__oxtitleprefix->value}]" ><img src="[{$oViewConf->getImageUrl($slogoImg)}]" alt="[{$oxcmp_shop->oxshops__oxtitleprefix->value}]"></a> 

В этой строке мы используем отличную функцию OXID — виджеты , которые позволяют нам повторно использовать условную бизнес-логику и логику шаблона во всем приложении. В этом случае мы oxwCategoryTree виджет oxwCategoryTree как указано в аргументе cl .

 [{oxid_include_widget cl="oxwCategoryTree" cnid=$oView->getCategoryId() sWidgetType="header" _parent=$oView->getClassName() nocookie=1}] 

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

 [{if $oxcmp_basket->getProductsCount()}] [{assign var="blAnon" value=0}] [{assign var="force_sid" value=$oViewConf->getSessionId()}] [{else}] [{assign var="blAnon" value=1}] [{/if}] 

Наконец, мы включаем другой виджет oxwMiniBasket и oxwMiniBasket widget/header/search.tpl .

 [{oxid_include_widget cl="oxwMiniBasket" nocookie=$blAnon force_sid=$force_sid}] [{include file="widget/header/search.tpl"}] 

Одним из соглашений, к которому вы хотите привыкнуть, является динамическая ссылка на объекты OXID и таблицы базы данных. Возьмите следующий фрагмент из приведенного выше примера кода в качестве примера:

 title="[{$oxcmp_shop->oxshops__oxtitleprefix->value}]" 

В этом примере шаблон oxtitleprefix столбца oxshops таблице oxshops . Это осуществляется с помощью магических методов в классе oxcmp_shop который расширяет класс oxView . Вы можете найти это в application/components . Короче говоря, мы можем извлечь значение из базы данных через предварительно определенный объект шаблона.

Я понимаю, что это начинает постепенно проходить через все, но после этого вступления все остальное довольно просто, поскольку оно последовательно основывается на нем.

Структура файла темы

Теперь, когда у нас есть базовое понимание структуры шаблонов. Давайте посмотрим на структуру файла темы OXID. Начиная с OXID Community Edition (CE) 4.7 и Professional / Enterprise Edition (PE / EE) 5.0, тема разделена на две части.

  • /application/views/ / /application/views/ / : для шаблонов, переводов и файлов конфигурации
  • /out/ : для публичных файлов (CSS, JavaScript, изображения и т. д.)

Просмотрите их в своей установке и ознакомьтесь с ними.

Мы можем создать тему одним из двух способов. Мы можем либо создать все шаблоны, изображения, CSS и JavaScript самостоятельно, либо расширить существующую тему и изменить только то, что нам нужно. Обе версии магазина CE 4.7 и PE / EE 5.0 поставляются с темой по умолчанию под названием Azure, которая предоставляет все основные шаблоны, CSS, JavaScript и файлы изображений, необходимые для создания рабочего магазина. Ради времени и простоты в этом примере мы расширим его, чтобы создать собственную тему.

Расширение основной темы

Давайте начнем создавать нашу новую пользовательскую тему. В разделе application/views создайте новый каталог с именем sitepoint . В нем создайте файл theme.php и добавьте к нему информацию ниже.

 <?php /** * Theme Information */ $aTheme = array( 'id' => 'sitepoint', 'title' => 'SitePoint', 'description' => 'example for SitePoint.com', 'thumbnail' => 'theme.jpg', 'version' => '1.3', 'author' => , 'parentTheme' => 'azure', 'parentVersions' => array('1.3') ); 

Это дает уникальный идентификатор и имя нашей теме и сообщает OXID, что мы будем использовать тему Azure в качестве основы. Таким образом, если OXID не может найти шаблон в нашей теме, он пойдет искать его в теме Azure и будет обслуживать его оттуда.

Чтобы эти примеры были практичными, мы внесем три небольших изменения во внешний вид магазина.

  • Смена логотипа
  • Удаление скроллера изображения с домашней страницы
  • Отображать дополнительный контент в профиле пользователя

Изменение логотипа

В /out создайте новый каталог с именем sitepoint . Под ним создайте две новые директории: img и src и загрузите файл theme.jpg . Затем загрузите файл logo.png в /img . Это немного измененная версия по умолчанию, которую я сделал, чтобы ясно показать, что мы меняем тему.

Теперь все готово, вам нужно войти в магазин и включить новую тему. Так что иди в /admin и войти. После этого вы увидите макет, подобный скриншоту ниже. В левом столбце навигации нажмите «Расширения», затем «Темы».

oxid2-02

В списке справа вы увидите Azure и PHP Master. Нажмите «Мастер PHP». Затем в правой верхней части нижней панели нажмите «Активировать». Все хорошо, ваша тема сейчас активна.

Когда вы перезагрузите магазин, вы, скорее всего, увидите там оригинальный логотип, а не тот, который вы только что установили. Самое время представить каталог tmp . Как и все хорошее программное обеспечение, OXID широко использует кэширование.

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

Тем временем в корне вашей установки вы увидите каталог с именем tmp . Удалите все файлы в нем, а затем перезагрузите магазин. Теперь вы увидите свой новый удивительный логотип магазина.

Удаление скроллера изображений домашней страницы

Хорошо, смена логотипа была довольно простой, легкий способ начать. Теперь давайте внесем некоторые изменения в шаблон. Давайте удалим скроллер изображений с домашней страницы. Это большая область изображения чуть ниже основного раздела навигации и панели поиска, как показано на скриншоте ниже.

oxid2-03

Скопируйте application/views/azure/tpl/layout/header.tpl в application/views/sitepoint/tpl/layout/header.tpl , создав необходимую структуру каталогов. Как только это будет сделано, откройте скопированный файл и удалите раздел справа внизу, который похож на код ниже:

 [{if $oView->getClassName()=='start' && $oView->getBanners()|@count > 0 }] <div class="oxSlider"> [{include file="widget/promoslider.tpl" }] </div> [{/if}] 

Очистите каталог tmp и перезагрузите магазин. После этого ваш магазин должен напоминать скриншот ниже.

oxid2-04

Условный вывод на дисплей

Теперь давайте продолжим шагать с чуть более жестким примером. На этот раз мы собираемся отобразить некоторую дополнительную информацию в учетной записи пользователя, когда он вошел в систему.

Чтобы увидеть, как выглядит существующая учетная запись пользователя, войдите в магазин, а затем перейдите в / en / my-account / . Кроме того, когда вы вошли в систему, вы можете нажать «Учетная запись» в верхней правой части магазина, а затем нажать «Моя учетная запись», как показано на скриншоте ниже.

oxid2-05

На этой странице вы увидите несколько ссылок, а также сведения о пользователе, такие как адрес электронной почты и имя. Если вы выполните DESCRIBE для таблицы oxuser в базе данных, вы увидите, что схема выглядит следующим образом:

оксидной-t3

Мы собираемся добавить небольшую таблицу внизу страницы «Моя учетная запись», в которой перечислены некоторые ключевые сведения о пользователе. Эти:

  • Компания
  • Адрес
  • Телефонный номер

Для этого нам нужно сделать две вещи:

  1. Изменить другой шаблон
  2. Взаимодействовать с некоторыми объектами шаблона OXID

Сначала скопируйте шаблон application/views/azure/tpl/page/account/dashboard.tpl в то же место в папке application/views/sitepoint/tpl/page/account/dashboard.tpl , создав там структуру каталогов, где это необходимо. В нем вы заметите два элемента div, по одному для каждого столбца в макете. Внизу первого div вы увидите следующий код:

 [{if $oView->isEnabledDownloadableFiles()}] <dl> <dt><a id="linkAccountDownloads" href="[{ oxgetseourl ident=$oViewConf->getSelfLink()|cat:"cl=account_downloads" }]" rel="nofollow">[{ oxmultilang ident="MY_DOWNLOADS" }]</a></dt> <dd>[{ oxmultilang ident="MY_DOWNLOADS_DESC" }]</dd> </dl> [{/if}] 

Под которым добавьте следующее:

 <dl> <dt>[{ oxmultilang ident="PAGE_ACCOUNT_DASHBOARD_COMPANY" }]</dt> <dd>[{ $oxcmp_user->oxuser__oxcompany->value }]</dd> </dl> <dl> <dt>[{ oxmultilang ident="PAGE_ACCOUNT_DASHBOARD_ADDRESS" }]</dt> <dd> [{ $oxcmp_user->oxuser__oxstreet->value }] [{ $oxcmp_user->oxuser__oxstreetnr->value }] [{ $oxcmp_user->oxuser__oxcity->value }] [{ $oxcmp_user->oxuser__oxzip->value }] </dd> </dl> <dl> <dt>[{ oxmultilang ident="PAGE_ACCOUNT_DASHBOARD_PHONE" }]</dt> <dd>[{ $oxcmp_user->oxuser__oxfon->value }]</dd> </dl> 

Это добавит как метку, так и значение соответствующих свойств, используя доступные магические методы объектов для извлечения информации из базы данных.

Добавление переводов

Если мы очистим каталог tmp и перезагрузим магазин, у нас появятся довольно неприятные предупреждения, потому что переводы отсутствуют. Нам нужно добавить пользовательские файлы переводов вместе с новыми переводами, чтобы наши изменения работали независимо от языка пользователя.

Итак, под application/views/sitepoint/ создайте две директории: de и en . Под ними создайте новый файл с именем cust_lang.php . В поле под de добавьте следующее:

 <?php $sLangName = "Deutsch"; // ------------------------------- // RESOURCE IDENTIFIER = STRING // ------------------------------- $aLang = array( 'charset' => 'ISO-8859-15', 'PAGE_ACCOUNT_DASHBOARD_COMPANY' => "Company", 'PAGE_ACCOUNT_DASHBOARD_ADDRESS' => "Address", 'PAGE_ACCOUNT_DASHBOARD_PHONE' => "Phone Nummer" ); 

В том, что под en добавить:

 <?php $sLangName = "English"; // ------------------------------- // RESOURCE IDENTIFIER = STRING // ------------------------------- $aLang = array( 'charset' => 'ISO-8859-15', 'PAGE_ACCOUNT_DASHBOARD_COMPANY' => "Firma", 'PAGE_ACCOUNT_DASHBOARD_ADDRESS' => "Adresse", 'PAGE_ACCOUNT_DASHBOARD_PHONE' => "Telefonnummer" ); 

Теперь, когда вы очистите каталог tmp и перезагрузите страницу, вы увидите новые дополнения, которые будут выглядеть как на скриншоте ниже.

oxide2-06

В заключение

Мы перешли от установки копии OXID eSales Community Edition к настройке внешнего вида для наших нужд. Все очень просто, предсказуемо и просто.

Я надеюсь, что вам понравилась эта серия, и она показывает вам, что OXID является отличным инструментом для электронной коммерции. Остановитесь на части 3, где мы создаем пользовательский модуль, позволяющий настроить OXID на общеизвестный «следующий уровень».

Изображение через Fotolia