Страница 1 из 1
Widget yii2
Добавлено: 2017.02.09, 11:31
Jettecs
Вывожу вот такой код
потом вывожу свои данные и затем
Begin and End должны выводить часть разметки которая мне необходима. Но по итогу ничего не выводит. Begin и End я переопределил, через var_dump выводится все так как мне надо. Как добиться необходимого вывода
Re: Widget yii2
Добавлено: 2017.02.09, 12:10
Alexum
Jettecs писал(а): ↑2017.02.09, 11:31
Begin и End я переопределил...
"Я тут поломал виджет, почему он не работает?". Как минимум покажите код своих методов.
Re: Widget yii2
Добавлено: 2017.02.09, 12:18
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.');
}
}
Re: Widget yii2
Добавлено: 2017.02.09, 12:37
satoved
Begin и end должны возвращать сам объект виджета, а вывод осуществляется обычным echo сразу.
У вас же выводится только:
А по умолчанию run() пустой.
Re: Widget yii2
Добавлено: 2017.02.09, 12:40
Jettecs
satoved писал(а): ↑2017.02.09, 12:37
Begin и end должны возвращать сам объект виджета, а вывод осуществляется обычным echo сразу.
У вас же выводится только:
А по умолчанию run() пустой.
нет не каких echo. Вывод должен происходить после инициализации. Вот после этого должна вывестись первая часть разметки <?Portlet::begin() ?> а после этого <?Portlet::end() ?> вторая
Re: Widget yii2
Добавлено: 2017.02.09, 12:41
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.');
}
}
Re: Widget yii2
Добавлено: 2017.02.09, 12:44
satoved
Окей, если вам так нравится, тогда сделайте так:
Код: Выделить всё
<?= Portlet::begin() ?>
<?= Portlet::end() ?>
Re: Widget yii2
Добавлено: 2017.02.09, 12:51
zelenin
в yii2 же нет portlet. поэтому непонятно как работает оригинальный переопределенный виджет.