Widget yii2

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Jettecs
Сообщения: 13
Зарегистрирован: 2017.02.03, 16:30

Widget yii2

Сообщение Jettecs »

Вывожу вот такой код

Код: Выделить всё

 <?php Portlet::begin()?>
потом вывожу свои данные и затем

Код: Выделить всё

 <?php Portlet::end()?>
Begin and End должны выводить часть разметки которая мне необходима. Но по итогу ничего не выводит. Begin и End я переопределил, через var_dump выводится все так как мне надо. Как добиться необходимого вывода

Аватара пользователя
Alexum
Сообщения: 681
Зарегистрирован: 2016.09.26, 10:00

Re: Widget yii2

Сообщение Alexum »

Jettecs писал(а):
2017.02.09, 11:31
Begin и End я переопределил...
"Я тут поломал виджет, почему он не работает?". Как минимум покажите код своих методов.

Jettecs
Сообщения: 13
Зарегистрирован: 2017.02.03, 16:30

Re: Widget yii2

Сообщение Jettecs »

Alexum писал(а):
2017.02.09, 12:10
Jettecs писал(а):
2017.02.09, 11:31
Begin и End я переопределил...
"Я тут поломал виджет, почему он не работает?". Как минимум покажите код своих методов.

Код: Выделить всё

 public static function begin($config = [])
    {
        $config['class'] = get_called_class();
        /* @var $widget Widget */
        $widget = Yii::createObject($config);
        static::$stack[] = $widget;
            $test="<div class='portlet'><br />";

        return $test;
    }

    public static function end()
    {
        if (!empty(static::$stack)) {
            $widget = array_pop(static::$stack);
            if (get_class($widget) === get_called_class()) {
                echo $widget->run();
                $test2="</div>";
                return $test2;
            } else {
                throw new InvalidCallException('Expecting end() of ' . get_class($widget) . ', found ' . get_called_class());
            }
        } else {
            throw new InvalidCallException('Unexpected ' . get_called_class() . '::end() call. A matching begin() is not found.');
        }
    }

satoved
Сообщения: 14
Зарегистрирован: 2015.10.07, 17:51

Re: Widget yii2

Сообщение satoved »

Begin и end должны возвращать сам объект виджета, а вывод осуществляется обычным echo сразу.

У вас же выводится только:

Код: Выделить всё

echo $widget->run();
А по умолчанию run() пустой.

Jettecs
Сообщения: 13
Зарегистрирован: 2017.02.03, 16:30

Re: Widget yii2

Сообщение Jettecs »

satoved писал(а):
2017.02.09, 12:37
Begin и end должны возвращать сам объект виджета, а вывод осуществляется обычным echo сразу.

У вас же выводится только:

Код: Выделить всё

echo $widget->run();
А по умолчанию run() пустой.
нет не каких echo. Вывод должен происходить после инициализации. Вот после этого должна вывестись первая часть разметки <?Portlet::begin() ?> а после этого <?Portlet::end() ?> вторая

satoved
Сообщения: 14
Зарегистрирован: 2015.10.07, 17:51

Re: Widget yii2

Сообщение satoved »

Соответственно должно работать:

Код: Выделить всё

 public static function begin($config = [])
    {
        $config['class'] = get_called_class();
        /* @var $widget Widget */
        $widget = Yii::createObject($config);
        static::$stack[] = $widget;
        
        echo "<div class='portlet'><br />";

        return $widget;
    }

    public static function end()
    {
        if (!empty(static::$stack)) {
            $widget = array_pop(static::$stack);
            if (get_class($widget) === get_called_class()) {
                echo $widget->run();
                echo "</div>";
                return $widget;
            } else {
                throw new InvalidCallException('Expecting end() of ' . get_class($widget) . ', found ' . get_called_class());
            }
        } else {
            throw new InvalidCallException('Unexpected ' . get_called_class() . '::end() call. A matching begin() is not found.');
        }
    }

satoved
Сообщения: 14
Зарегистрирован: 2015.10.07, 17:51

Re: Widget yii2

Сообщение satoved »

Окей, если вам так нравится, тогда сделайте так:

Код: Выделить всё

<?= Portlet::begin() ?>
<?= Portlet::end() ?>

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Widget yii2

Сообщение zelenin »

в yii2 же нет portlet. поэтому непонятно как работает оригинальный переопределенный виджет.

Ответить