PHP->Webasyst: программирование под популярный движок виртуального магазина

Webasyst – движок, использующий Smarty в качестве шаблонизатора. Cвои функции всё равно можно писать, через интерфейс плагинов Smarty. Плюсы этого способа – простота освоения и лёгкая инсталляция. Минусы – из таких плагинов не работают множество полезных и удобных функций движка, которые при написании плагина сэкономили бы вам кучу времени, а так же, не оправданно сложная развёртка сложных структур.
В этом мануале, я так же рассмотрю интерфейс самого движка, в котором работают все функции, используются классы и объекты, а установка сложнее.

Я использовал при написании этого материала Webasyst версии 285.

Для того, чтобы создать свой плагин, используя интерфейс Smarty, достаточно создать файл function.имяПлагина.php в директории /kernel/includes/smarty/plugins с таким содержанием:

<?php
function smarty_function_имяПлагина( $params, &$smarty )
{
	echo 'Hello World!';
}
?>

После этого в шаблон можно вставить тег {имяПлагина}, при выводе, он будет заменён на «Hello World!».
Если нужно передать функции параметр, можно использовать массив $params.

В коде шаблона:
{имяПлагина var=»Hello World!»}

В коде плагина:

<?php
function smarty_function_имяПлагина( $params, &$smarty )
{
	echo $params['var'];
}
?>

Впринципе, не возбраняется использование классов и объектов

<?php
function smarty_function_имяПлагина( $params, &$smarty )
{
require_once ('register_form.class.php');
 
$frm = new frm_reg ();
$frm->display();
}
?>

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

Но главный недостаток остаётся всё равно – из этого интерфейса многие функции движка остаются недоступны. (например db_fetch_row()), поэтому переходим к интерфейсу движка.

Создадим папку нашего модуля. Делается это по адресу $app_root/html/scripts/modules, где $app_root – путь до установленного приложения на платформу Webasyst (например у shop-script полный путь будет выглядеть так /published/SC/html/scripts/modules/). Назовём её новыйМодуль.

Теперь необходимо создать XML файл с именем connector.новыйМодуль.xml, с содержанием:

<Connector>
	<Class>
		<Name>новыйМодуль</Name>
		<File>class.новыйМодуль.php</File>
		<Title>Любое название</Title>
		<Description>Любое описание</Description>
		<SingleInstallation>true</SingleInstallation>
	</Class>
</Connector>

Как уже, наверняка стало понятно, в той же папке создаём класс модуля. class.новыйМодуль.php:

 class Modulename extends ComponentModule  {
 
	function initInterfaces(){
                $this->__registerComponent('modulename', 'Любое название', array('general_layout', 'home_page'), 'methodFShowModule');
	}
 
	function methodFShowModule(){
		$Register = &Register::getInstance();
		$smarty = &$Register->get(VAR_SMARTY);
                //передаём переменные в шаблон. может быть массивом
		$smarty->assign("vars", 'Hello World!');
               //грузим файл шаблона
		$smarty->display('новыйМодуль.tpl.html');
	}
 
	function exec () {
        //любые действия...
        echo 'Hello World!';
	}
}

Опять же, создаём шаблон Smarty, в директории templates, с названием файла новыйМодуль.tpl.html.

Остаётся только зарегистрировать новый модуль в базе.

INSERT INTO `SC_modules` SET `ModuleVersion`=1, `ModuleClassName`='новыйМодуль', `ModuleClassFile`='/новыйМодуль/class.новыйМодуль.php'

Поскольку идентификатор добавленной позиции добавляется autoincrement’ом, нужно его узнать.

SELECT `ModuleID` FROM `SC_modules` WHERE `ModuleClassName`='новыйМодуль';

Полученное число подставляем в следующий запрос.

INSERT INTO `SC_module_configs` SET `ModuleID`=полученное_ранее_число, `ConfigKey`='новыйМодуль', `ConfigInit`=1002, `ConfigEnabled`=1;

Опять узаём ID. На это раз, для удобства и понимания назовём полученное число «ID» и подставим его в следующий запрос.

SELECT `ModuleConfigID` FROM `SC_module_configs` WHERE `ModuleID`=полученное_ранее_число;
INSERT INTO `SC_interface_interfaces` SET `xInterfaceCaller`='51_cpt_connector', `xInterfaceCalled`='ID_новыйМодуль';

Если всё сделано правильно, в шаблон можно будет вставить тег {cpt_новыйМодуль}.

  • Трэкбеки закрыты
  • Комментарии (0)
  1. Комментариев пока нет.



Введите код с картинки