PrestaShop 1.6 - памятка для авторов модулей (для новичков)

PrestaShop 1.6 - памятка для авторов модулей (для новичков)

PrestaShop 1.6 - памятка для авторов модулей (для новичков)Техническая документация для создания своих модулей в PrestaShop 1.6 достаточно обильная. Однако, как и в большинстве подобных документах, в ней отсутствуют простые, но порой важные моменты. Такие, как например, создание своей формы для AdminController модуля без встроенного хелпера или же преобразование строки в url. Вся эта информация есть в интернете, но она раскидана по массе сайтов, из-за чего на ее поиск уходит много времени (конечно, в крайнем случае всегда можно покопаться в классах ядра, но все же). Как бы то ни было, в данной небольшой памятке я перечислю несколько полезных моментов и дам некоторые советы для начинающих.

Примечание: Статья предназначена для начинающих, так что если у вас за плечами уже не один модуль, то этот материал, вероятно, не для вас.

Начну от самого простого

1. Проблема с установкой PrestaShop 1.6. Падает на установке модулей

Несмотря на то, что сама PrestaShop 1.6 легко запускается на php 5.3 (она официально поддерживает эту версию), в инсталляционный пакет входят модули, которые используют конструкции php 5.4. Поэтому установка обрывается на модулях.

Примечание: В этом случае вам пригодится моя статья несколько версий php на Denwer.

2. Как выполнить sql-запрос и получить результат

<?php
// Выполнить запрос
Db::getInstance()->execute($query);
// Получить результат селекта
Db::getInstance()->executeS($query);
?>

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

<?php
class ...
...
public function exec($query)
{
    // Выполнить запрос
    return Db::getInstance()->execute($query);
}
public function select($query)
{
    // Получить результат селекта
    return Db::getInstance()->executeS($query);
}
...
function someFunc()
{
....
// Явно более короткая и удобная конструкция
$this->select($query);
....
}
?>

 

3. Как узнать идентификатор и код языка по дефолту

<?php
// Получаем идентификатор языка по дефолту
$id_lang_default = Configuration::get('PS_LANG_DEFAULT');
// Получаем код языка
$iso = LanguageCore::getIsoById($id_lang_default);
?>

 

4. Вывод собственной формы в бэк-контроллере модуля (административного) с использованием шаблона Smarty без хелпера

Чтобы вывести собственную форму с использованием шаблонизатора Smarty, необходимо в админ-контроллере переопределить метод initContent. И делается это следующим образом:

<?php
public function initContent()
{
    // Вызываем дочерний метод
    parent::initContent();
    // Получаем доступ к шаблонизатору
    $smarty = $this->context->smarty;
    // Формируем переменные
    $smarty->assign(array(
        'some_var' => 'some var'
    ));
    // Подключаем ваш шаблон
    $content = $smarty->fetch('your_template.tpl');
    
    // Вывод полученного html-контента
    $smarty->assign(array(
        'content' => $this->content . $content
    ));
}
?>

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

 

5. Ajax вызов методов админ контроллера модуля из jQuery

В PrestaShop 1.6 есть собственный механизм, который на основании параметров из GET / POST (QueryString и Form) определяет какой метод необходимо вызвать и который определяет является ли сам вызов ajax запросом. В документации приводится пример отправки и получения данных с использованием передачи параметров в data для конструкции $.ajax. Однако, такое не всегда удобно. Например, если вы формируете данные через serializeArray(). В таком случае можно использовать следующее

<?php
// Стандартная конструкция функции для ajax запроса
public function ajaxProcessMethodName()
{
    // Формируем json
    $json = array();
    $json['success'] = 1;
    // Возвращаем json
    die (Tools::jsonEncode($json));
}
?>

Обратите внимание на то, как строится название ajax метода. Вначале идет константа "ajaxProcess", а затем идет название вашего метода "MethodName". Так же важно, чтобы возврат json данных осуществлялся не с помощью "return", а с помощью конструкции "die", так как иначе могут возникать ошибки с заголовком ответа.

Чтобы вызвать данный метод нужно сформировать соответствующий url. Приведу пример того, как это можно сделать в шаблоне Smarty.

var methodUrl = "{$current|escape:'html':'UTF-8'}&token={$token|escape:'html':'UTF-8'}" + "&ajax" + "&action=methodName";

Обратите внимание, что кроме передачи token в админке, так же передаются параметры ajax и action. Параметр ajax указывает, что метод представляет собой асинхронный вызов. А в параметре action передается имя метода (первая буква маленькая).

Конечно, параметры ajax и action можно передавать и в data конструкции $.ajax, но все же проще сформировать такой url, а данные собирать с помощью стандартного метода jQuery для формы serializeArray().

 

6. Создание и удаление собственных закладок административных контроллеров модуля PrestaShop

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

<?php
public function installTab()
{
    // Создаем закладку
    $tab = new Tab();
    // Указываем имя файла (оно же название админ контроллера)
    $tab->class_name = 'YourAdminControllerFileAndClassName';
    // Здесь указываем родительский элемент (можно использовать конструкцию из unisntallTab)
    // 0 - это корень
    $tab->id_parent  = 0; 
    // Название модуля
    $tab->module = $this->name; 
    // Описание
    $tab->name[(int) (Configuration::get('PS_LANG_DEFAULT'))] 
            = $this->l('Your tab name');
    // Собственно, добавление закладки
    if (!$tab->add()) 
        return false;
    return true;
}
public function unisntallTab()
{
    // Находим нашу вкладку
    $tab = new Tab(Tab::getIdFromClassName('YourAdminControllerFileAndClassName'));
    // Собственно, удаляем ее
    if (!$tab->delete())
        return false;
    return true;
}
?>

Учтите, что данные методы необходимо вызывать в основных методах install и uninstall модуля и так же проверять при установке и удалении, что они возвращают "true".

 

7. И напоследок, несколько полезных методов класса Tools

<?php
// Получение значения из GET / POST (QueryString и Form).
// Значения вытаскиваются из обоих наборов. Это важный момент
Tools::getValue("VarName");
// Преобразование объекта в json
Tools::jsonEncode(array('success'=>'1'));
// Получение ЧПУ из строки (стандартный метод, который используется внутри контроллеров самой PrestaShop)
Tools::str2url($value);
?>

Надеюсь это небольшая памятка поможет вам при создании ваших модулей для PrestaShop 1.6.

Социальные сети

☕ Понравился обзор? Поделитесь с друзьями!

Добавить комментарий / отзыв
Комментарий - это вежливое и наполненное смыслом сообщение (правила).



* Нажимая на кнопку "Отправить", Вы соглашаетесь с политикой конфиденциальности.
Социальные сети
Программы (Freeware, OpenSource...)