Тема: Добавление нового метода к объекту товара.

Добрый день!
При попытке расширить поведение ORM-объекта Product возникли сложности.
Исходя из того, насколько я понял видеоурок на эту тему - мною сделано следующее:

1. В стороннем модуле Custom в классе handlers.inc.php:

    function init()
    {
        $this
            ->bind('orm.init.shop-order')
            ->bind('initialize');
    }

    /**
     * Подключаем методы к объекту товара из стороннего модуля
     */
    public static function initialize()
    {
        \Catalog\Model\Orm\Product::attachClassBehavior(new \Custom\Model\Behavior\CatalogProduct);
    }

2. В \custom\model\behavior\catalogproduct.php:

namespace Custom\Model\Behavior;
use RS\Behavior\BehaviorAbstract;

class CatalogProduct extends BehaviorAbstract
{
    /**
     * Возвращает массив товаров с с таким же базовым артикулом
     *
     */
    function getProductsLikeThis()
    {
        return "test";
    }

}

Вроде бы все по инструкции, но при очистке кэша - 500 (Internal Server Error)
До написания необходимой функции и использования ее в шаблоне - соответственно не дошел, так как уперся в данную проблему. Помогите найти ошибку.

Re: Добавление нового метода к объекту товара.

Во первых включите отображение ошибок
https://readyscript.ru/faq/#faq-errors

А во вторых дело видимо в

->bind('orm.init.shop-order')

У Вас хук объявлен, а функции не вижу.

3 Отредактировано Максим (11.10.2016 11:55:50)

Re: Добавление нового метода к объекту товара.

она ниже, вот полный код из файла handlers.inc.php:

<?php

namespace Custom\Config;
use Exchange\Model\Importers\Catalog;
use \RS\Orm\Type as OrmType;

/**
* Класс предназначен для объявления событий, которые будет прослушивать данный модуль и обработчиков этих событий.
*/
class Handlers extends \RS\Event\HandlerAbstract
{
    function init()
    {
        $this
            ->bind('orm.init.shop-order')
            ->bind('initialize');
    }

    /**
     * Подключаем методы к объекту товара из стороннего модуля
     */
    public static function initialize()
    {
        \Catalog\Model\Orm\Product::attachClassBehavior(new \Custom\Model\Behavior\CatalogProduct);
    }

    /**
     * Расширяем объект заказа
     *
     * @param \Shop\Model\Orm\Order $order - объект закзаа
     */
    public static function ormInitShopOrder(\Shop\Model\Orm\Order $order)
    {
        $order->getPropertyIterator()->append(array(
            'order_post_id' => new OrmType\Varchar(array(
                'maxLength' => '50',
                'description' => t('Идентификатор отправления'),
            )),
            'delivery_cost' => new OrmType\Decimal(array(
                'maxLength' => '15',
                'decimal' => 2,
                'description' => t('Стоимость доставки'),
            )),
        ));
    }
}

Модуль был создан ранее и с расширением объекта Заказ справлялся. Проблемы начались после добавления хука ->bind('initialize') и соответствующей функции

Re: Добавление нового метода к объекту товара.

Ну вы ошибки включили? Что ошибка говорит?

5

Re: Добавление нового метода к объекту товара.

Сделал все по инструкции. Ошибка должна выводиться на самой странице? Выводится пустая страница, а в консоли - 500 (Internal Server Error).

6

Re: Добавление нового метода к объекту товара.

Все, спасибо! Не правильно был назван файл с классом CatalogProduct
было: catalogproduct.php, а надо было catalogproduct.inc.php