02 мая 2017 г. 14:44:52
Созадем файл например observer.php в папке modules/core/mail/ со следующим содержанием:
<?php
defined('HOSTCMS') || exit('HostCMS: access denied.');
class Core_Mail_Observer
{
static public function onBeforeSend($Core_Mail)
{
$from = 'noreply@site.ru'; // От кого
$fromName = 'Интернет-магазин'; // Имя отправителя
$Core_Mail
->from($from)
->senderName($fromName)
->header('Return-Path', $from)
;
}
}
?>
Добавляем наблюдателя в bootstrap.php:
Core_Event::attach('Core_Mail.onBeforeSend', array('Core_Mail_Observer', 'onBeforeSend'));
...
Читать дальше →
core_event, хуки, HostCMS
19 июля 2016 г. 11:02:21
Есть странность, при копировании интернет-магазина в HostCMS, происходит только копирование его настроек, доставок, платежных систем, цен итд, но не его групп и товаров, так что для этого мы можем использовать следующий код:
<?php
$oShopOne = Core_Entity::factory('Shop', 1); // магазин откуда копируем
$oShopTwo = Core_Entity::factory('Shop', 2); // магазин куда копируем
$oShop_Groups = $oShopOne->Shop_Groups;
$oShop_Groups->queryBuilder()->where('parent_id','=',0); // выбираем все группы из корня
$aShop_Groups = $oShop_Groups->findAll(FALSE);
Core_Event::attach('shop_group.onBeforeCopy', array('Shop_Copy_Observer', 'onBeforeCopy'));
Core_Event::attach('shop_item.onBeforeCopy', array('Shop_Copy_Observer', 'onBeforeCopy'));
foreach($aShop_Groups as $oShop_Group)
{
$oShop_Group->copy();
}
$oShopTwo->recount(); // пересчитываем магазин
class Shop_Copy_Observer
{
public static function onBeforeCopy($newObject, $athis)
{
$newObject->shop_id = 2; // ID магазина куда копируем
}
}
?>
...
Читать дальше →
shop_items, хуки, core_event, php, hostcms6, shop, shop_groups
1 комментарий
14 июня 2016 г. 00:19:25
Создаем файл /modules/admin/form/action/controller/type/edit/observer.php
со следующим содержимым:
<?php
/* Добавление/скрытие полей форм ЦА HostCMS v6 */
defined('HOSTCMS') || exit('HostCMS: access denied.');
class Admin_Form_Action_Controller_Type_Edit_Observer
{
// либо public static function onAfterRedeclaredPrepareForm($controller, $args)
// Генерация стандартной формы редактирования осуществляется методом _prepareForm() контроллера Admin_Form_Action_Controller_Type_Edit. Далее в методе класса потомка, например Shop_Controller_Edit, осуществляется перемещение полей по вкладкам и для корректировки уже этого перемещения необходимо использовать событие Admin_Form_Action_Controller_Type_Edit.onAfterRedeclaredPrepareForm.
public static function onBeforeExecute($controller, $args)
{
list($operation, $Admin_Form_Controller) = $args;
if(is_null($operation))
{
// Данное событие будет вызываться для всех форм, определяем с каким контроллером работаем
switch(get_class($controller))
{
// Редактирование информационной системы
case 'Informationsystem_Controller_Edit':
// Получаем доступ к вкладке "Основные"
$mainTab = $controller->getTab('main');
// Если вдруг мы добавили новый столбец 'sign' в БД то система будет ругаться "Key 'sign' in 'ru' language does not exist for model 'informationsystem'."
// Конечно же в файл /modules/informationsystem/i18n/ru.php мы ничего внести не может, как оказалось он затирается, для этого делаем следующее
$controller->getField('sign')->caption("Подпись");
// Удаляем поле "Сортировка" с вкладки "Основные"
$mainTab->delete($controller->getField('sorting'));
// Добавляем произвольное поле на вкладку "Основные"
// либо до/после (addBefore/addAfter) уже существующего поля
$customFiled = Admin_Form_Entity::factory('Input')->name("custom");
$mainTab->addAfter($customFiled, $controller->getField('name'));
// либо просто добавляем, в большем случае в конце
$mainTab->add($customFiled);
break;
}
}
}
}
В файле bootstrap.php
в конце добавляем следующую строчку:
// Добавление/скрытие полей форм ЦА
Core_Event::attach('Admin_Form_Action_Controller_Type_Edit.onBeforeExecute', array('Admin_Form_Action_Controller_Type_Edit_Observer', 'onBeforeExecute'));
// либо Core_Event::attach('Admin_Form_Action_Controller_Type_Edit.onAfterRedeclaredPrepareForm', array('Admin_Form_Action_Controller_Type_Edit_Observer', 'onAfterRedeclaredPrepareForm'));
// если первое не работает
...
Читать дальше →
php, core_event, hostcms6, хуки
20 апреля 2016 г. 22:08:23
Создаем файл /modules/admin/form/controller/observer.php со следующим содержимым:
<?php
/* Добавление собственного пункта меню в выпадающее меню в ЦА HostCms v6 */
defined('HOSTCMS') || exit('HostCMS: access denied.');
class Admin_Form_Controller_Observer
{
public static function onBeforeAddEntity($controller, $args)
{
list($oAdmin_Form_Entity) = $args;
if($controller->getAdminForm()->id == 65) // Интернет-магазин, товары и группы, id нужной формы можно посмотреть в Формах центра администрирования
{
if (strpos(get_class($oAdmin_Form_Entity), 'Admin_Form_Entity_Menus') !== FALSE)
{
$aChildren = $oAdmin_Form_Entity->getChildren();
$sProperties = '/admin/shop/item/import/mymenu/index.php';
$oShop = Core_Entity::factory('Shop', Core_Array::getGet('shop_id', 0));
$oShopGroup = Core_Entity::factory('Shop_Group', Core_Array::getGet('shop_group_id', 0));
$additionalParams = "shop_id={$oShop->id}&shop_group_id={$oShopGroup->id}";
// удаление пункта меню с индексом 5 или шестой по счету
//$aChildren[0]->deleteChild(5);
// Добавляем потомка первому элементу меню
$aChildren[0]->add(
Admin_Form_Entity::factory('Menu')
->name('Мое меню')
->icon('fa fa-download icon-separator')
->href($controller->getAdminLoadHref($sProperties, NULL, NULL, $additionalParams))
->onclick($controller->getAdminLoadAjax($sProperties, NULL, NULL, $additionalParams))
);
}
}
}
}
В файле bootstrap.php в конце добавляем следующую строчку:
// Добавление собственного пункта меню в выпадающее меню в ЦА
Core_Event::attach('Admin_Form_Controller.onBeforeAddEntity', array('Admin_Form_Controller_Observer', 'onBeforeAddEntity'));
...
Читать дальше →
php, hostcms6, хуки, core_event
1 комментарий