Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Использование Events-System


Recommended Posts

Добрый день. После прочтения Документации вопросов вроде не осталось. Но при практическом применение все оказалось не так как я ожидал.

Вопрос в следующем: как используя систему событий добавить новое поле в карточке товара. Именно с использованием Events.

 

Вот код при инсталляции:

$code = "add_filed_before";
$trigger = "admin/controller/catalog/product/edit/before";
$action = "extension/module/test/add_filed_before";
$this->model_setting_event->addEvent($code, $trigger, $action);

$code = "add_filed_after";
$trigger = "admin/controller/catalog/product/edit/after";
$action = "extension/module/test/add_filed_after";
$this->model_setting_event->addEvent($code, $trigger, $action);

 

Вот обработчики:

    public function add_filed_before($route, $data)
    {
		$data['my_filed'] = 123;
		var_dump($data);
    }

    public function add_filed_after($route, &$data, $output)
    {
		var_dump($data);
		var_dump($output);
    }

Так вот add_filed_before отрабатывает?, а add_filed_after

Ожидал что отдебажив что там в $data и $output будет понятно как действовать дальше. Но что то не заладилось.

Причем с моделью все отрабатывает на ура.

 

Надіслати
Поділитися на інших сайтах


3 hours ago, AlexDW said:

Спасибо

Как передать новые данные в view разобрался, но как добавить в twig новое поле пока не ясно. Вариант править в after output - изврат тот еще)))

Надіслати
Поділитися на інших сайтах


Вы уверены что вам нужно именно событие?
сделайте дедовским методом  - ocmodом

 

1 час назад, AlexYakovlev сказал:

Вариант править в after output - изврат тот еще)))

Все зависит от  того что править
если что-то править в dom - то изврат, хотя имеет право на жизнь

а если что-то добавить в в четкое место, то очень даже...

Надіслати
Поділитися на інших сайтах

Заметка

Создаем admin\controller\extension\module\test.php

 

<?
class ControllerExtensionModuleTest extends Controller
{
    private $error = array();
    public $action = [
        "admin/controller/catalog/product/edit/before",
        "admin/controller/catalog/product/edit/after",
        "admin/view/catalog/product_form/before",
        "admin/view/catalog/product_form/after",
        "admin/model/catalog/product/getProduct/before",
        "admin/model/catalog/product/getProduct/after"
    ];

    public function index()
    {
    }

    public function validate()
    {
    }

    public function install()
    {
        $this->load->model("setting/event");
        $this->load->model('setting/setting');

        $this->model_setting_setting->editSetting('module_test', ['module_test_status' => 1]);

        foreach ($this->action as $trigger) {
            $action = str_replace("/", "_", $trigger);
            $this->model_setting_event->addEvent("1my_" . $action, $trigger, "extension/module/test/" . $action);
        }
    }

    public function uninstall()
    {
        $this->load->model("setting/event");
        $this->load->model('setting/setting');
        $this->model_setting_setting->deleteSetting('module_test');
        foreach ($this->action as $trigger) {
            $this->model_setting_event->deleteEventByCode("1my_" . str_replace("/", "_", $trigger));
        }
    }

    public function Log($file_name, $var, $var_name)
    {
        ob_start();
        echo $var_name . "\n\t";
        var_dump($var);
        file_put_contents(DIR_LOGS . $file_name . ".log",  ob_get_clean() . "\n", FILE_APPEND);
    }

    public function admin_controller_catalog_product_edit_before(&$route, &$args = [])
    {
        file_put_contents(DIR_LOGS . __FUNCTION__ . ".log", "\n");
        $this->Log(__FUNCTION__, $route, "route");
        $this->Log(__FUNCTION__, $args, "args");
    }

    public function admin_controller_catalog_product_edit_after(&$route, &$args = [], &$output = null)
    {
        file_put_contents(DIR_LOGS . __FUNCTION__ . ".log", "\n");
        $this->Log(__FUNCTION__, $route, "route");
        $this->Log(__FUNCTION__, $args, "args");
        $this->Log(__FUNCTION__, $output, "output");
    }

    public function admin_view_catalog_product_form_before(&$route, &$args = [])
    {
        file_put_contents(DIR_LOGS . __FUNCTION__ . ".log", "\n");
        $this->Log(__FUNCTION__, $route, "route");
        $this->Log(__FUNCTION__, $args, "args");
    }

    public function admin_view_catalog_product_form_after(&$route, &$args = [], &$output = null)
    {
        file_put_contents(DIR_LOGS . __FUNCTION__ . ".log", "\n");
        $this->Log(__FUNCTION__, $route, "route");
        $this->Log(__FUNCTION__, $args, "args");
        $this->Log(__FUNCTION__, $output, "output");
    }

    public function admin_model_catalog_product_getProduct_before(&$route, &$args = [])
    {
        file_put_contents(DIR_LOGS . __FUNCTION__ . ".log", "\n");
        $this->Log(__FUNCTION__, $route, "route");
        $this->Log(__FUNCTION__, $args, "args");
    }

    public function admin_model_catalog_product_getProduct_after(&$route, &$args = [], &$output = null)
    {
        file_put_contents(DIR_LOGS . __FUNCTION__ . ".log", "\n");
        $this->Log(__FUNCTION__, $route, "route");
        $this->Log(__FUNCTION__, $args, "args");
        $this->Log(__FUNCTION__, $output, "output");
    }
}

Устанавливаем расширение, проверяем events list, заходим в карточку товара. После можно анализировать что появилось в storage/logs/admin_*.log

Надіслати
Поділитися на інших сайтах


  • 1 year later...
В 09.04.2020 в 21:11, AlexDW сказал:

разобрался кажись, спасибо

Змінено користувачем wewewe777
Надіслати
Поділитися на інших сайтах


а, не, не получилось, данные то получил, когда вьюшку вызывал, но передать во вьюшку как?

когда вызываю контролер after, то данных нет, когда вьюшку вызываю, данные есть, но как их изменить

Змінено користувачем wewewe777
Надіслати
Поділитися на інших сайтах


не, не получается, то есть есть определенный модуль на странице категорий, я хочу получить в него данные с контролера категорий

Змінено користувачем wewewe777
Надіслати
Поділитися на інших сайтах


12 часов назад, wewewe777 сказал:

не, не получается, то есть есть определенный модуль на странице категорий, я хочу получить в него данные с контролера категорий

что не получвется?

В событие приходят данные $data
view/before
 

 

view/after - $output

model/before переданные в модель данные
model/after  переданные в модель данные и return

 

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.