Преднастройка / конфигурирование переменных виджетов до вывода View php/xml/rss/twig?

Обсуждаем, как правильно строить приложения
Ответить
Аватара пользователя
t9221823420
Сообщения: 37
Зарегистрирован: 2017.08.23, 10:52
Контактная информация:

Преднастройка / конфигурирование переменных виджетов до вывода View php/xml/rss/twig?

Сообщение t9221823420 »

(с веткой возможно ошибся, но ИМХО это больше проектирование)

внутри View большая часть элементов отрисовывается через виджеты и код по большей части выглядит как array-портянка c вкраплениями HTML. С переходом на TWIG ситуация усугубилась невменяемыми синтаксисом этих настроек виджетов (на вкус и цвет все фломастеры разные - меня этот синтаксис просто убивает) ну и там еще пачка twig-"бонусов". Хочу вынести настройки виджетов в отдельный слой. Вижу для себя это как PreRender в настройках которого указать (php/xml/rss/twig), что отрисовывать (куда перенаправлять) настройки/конфигурацию этих виджетов. Ну т.е. хочу убрать все лишнее из View.

1) Как правильно называется этот промежуточный этап/слой (если у него есть название)?
2) Как его принято реализовывать в рамках MVxxx?
Ищу работу: https://goo.gl/WuGz1q
GitHub: https://goo.gl/2XAqy5
Резюме на HH (рус):https://goo.gl/Ay3YmC
Резюме на HH (eng):https://goo.gl/gxyd1X

Стоимость работ: от $25 час

тел/vbr/wsp: 79221236438
skype/tlgrm: t9221823420
email: t9221823420@gmail.com
Аватара пользователя
t9221823420
Сообщения: 37
Зарегистрирован: 2017.08.23, 10:52
Контактная информация:

Re: Преднастройка / конфигурирование переменных виджетов до вывода View php/xml/rss/twig?

Сообщение t9221823420 »

спасибо за ссылку - статья безусловно полезная, кое-что подчерпнул. Вопросов стало еще больше ))

Но я немного о другом. Я не про дефолтные настройки сейчас говорю, а про подготовленные данные для вывода.
Настройки полей для вывода в DetailView или GridView бывают очень непростые - иногда получется толсто. Очень хочется это из HTML.php убрать в промежуточный слой. С переходом на TWIG ситуация только усугубилась - тащить эти настройки аттрибутов в twig совсем не хочется. Т.е. надо что-то вроде:

Action->configView->renderTwig (HTML/RSS/JSON - нужное подчеркнуть) - виджеты могут быть разные и отрисовывать могут не только HTML

шаблонизатор по сути тоже является промежуточным слоем - просто синтаксис у него ... эмм ... не всегда "удобный"

Пока вижу решение только через доработаный Render
Ищу работу: https://goo.gl/WuGz1q
GitHub: https://goo.gl/2XAqy5
Резюме на HH (рус):https://goo.gl/Ay3YmC
Резюме на HH (eng):https://goo.gl/gxyd1X

Стоимость работ: от $25 час

тел/vbr/wsp: 79221236438
skype/tlgrm: t9221823420
email: t9221823420@gmail.com
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Преднастройка / конфигурирование переменных виджетов до вывода View php/xml/rss/twig?

Сообщение ElisDN »

Шаблонизаторы как раз придуманы для того, чтобы отделить программный код от вёрстки. Чтобы в них них никто не программировал анонимками и в базу данных напрямую не лез. Но Yii придумывали для быстрой разработки с GridView и Yii::$app, поэтому более осторожные подходы без статики и анонимок в нём выглядят весьма болезненно и внедряются порой с костылями.

Из GridView настройки и код анонимок убираются в классы колонок как StatusColumn в http://www.elisdn.ru/blog/76/seo-servic ... in-and-sef:

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

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        'id',
        'created_at:datetime',
        'email:email',
        [
            'class' => StatusColumn::class,
            'filter' => $searchModel->getStatusesArray(),
            'attribute' => 'status',
        ], 
        ['class' => ActionColumn::class],
    ],
]); ?>
и вcё остальное - в хелперы. В оригинальном Twig те же хелперы реализуются как Twig\Extension.

А так стоит подумать, есть ли смысл извращаться с анонимками в DetailView:

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

<?= DetailView::widget([
    'model' => $model,
    'attributes' => [
        'id',
        'title',
        [
            'attribute' => 'category',
            'value' => function ($model) {
                return Html::a(Html::encode($model->category), ['view', 'id' => $model->category->id]);
            },
            'visible' => $model->category !== null,
            'format' => 'raw',
        ],
    ],
]); ?>
если с шаблонизатором это же проще вывести напрямую:

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

<table class="table table-striped table-bordered detail-view">
<tbody>
    <tr><th>ID</th><td>{{ model.id }}</td></tr>
    <tr><th>Заголовок</th><td>{{ model.title }}</td></tr>
    {% if model.category %}
        <tr>
            <th>Категория</th>
            <td><a href="{{ path('category/view', {'id': model.category.id}) }}">{{ model.category.title }}</a></td>
        </tr>
    {% endif %}
</tbody>
</table>
Аватара пользователя
t9221823420
Сообщения: 37
Зарегистрирован: 2017.08.23, 10:52
Контактная информация:

Re: Преднастройка / конфигурирование переменных виджетов до вывода View php/xml/rss/twig?

Сообщение t9221823420 »

это все просто, понятно и согласен ... но что если:

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

'from_datetime' => $config_datetime = [
    'type' => Form::INPUT_WIDGET,
    'widgetClass' => DateControl::className(),
    'label' => 'date / time',
    'options' => [
        'type'=>DateControl::FORMAT_DATETIME,
        'widgetOptions' => [
            'layout' => '{input}{picker}',
            'options' => [ 'placeholder' => 'Select operating time ...' ],
            'pluginOptions' => [
                'todayHighlight' => true,
                'todayBtn' => true,
            ],
        ],
    ],
],
... и таких полей 20-30 штук (типичный пример - заполнение отчета) ... и отчетов этих с 10-ок и отчеты прилично отличаются, но часть полей перекликаются? ... Как оформить 30-ть разных полей с разными условиями отображения (да - я про анонимки)? для 10-ти разных моделей?

А теперь представьте это все в twig запихнуть? И сразу первый вопрос - зачем туда тащить весь этот PHP?

А потом бухгалтер звонит и говорит - нам нужен еще один такой отчет, только с датой в другом формате, потому что вот сюда он хорошо показывает, а здесь нам нужно округлить до 30-ти минут, потому что мы округляем так. И, простите, куда я должен запихнуть функцию округления для нового отчета? Она-то срать хотела на весь этот MVC - ей надо "округлить и заголовок поменять"
Ищу работу: https://goo.gl/WuGz1q
GitHub: https://goo.gl/2XAqy5
Резюме на HH (рус):https://goo.gl/Ay3YmC
Резюме на HH (eng):https://goo.gl/gxyd1X

Стоимость работ: от $25 час

тел/vbr/wsp: 79221236438
skype/tlgrm: t9221823420
email: t9221823420@gmail.com
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Преднастройка / конфигурирование переменных виджетов до вывода View php/xml/rss/twig?

Сообщение ElisDN »

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

'from_datetime' => FormHelper::dateTimeControl('date / time', 'Select operating time ...')
Аватара пользователя
t9221823420
Сообщения: 37
Зарегистрирован: 2017.08.23, 10:52
Контактная информация:

Re: Преднастройка / конфигурирование переменных виджетов до вывода View php/xml/rss/twig?

Сообщение t9221823420 »

ну а настройки где? $format, $value, и т.д.?

'from_datetime' => FormHelper::dateTimeControl( from_datetime_params ) - так нужно ....

где разместить настройки этого самого from_datetime_params?
Последний раз редактировалось t9221823420 2017.11.23, 15:47, всего редактировалось 1 раз.
Ищу работу: https://goo.gl/WuGz1q
GitHub: https://goo.gl/2XAqy5
Резюме на HH (рус):https://goo.gl/Ay3YmC
Резюме на HH (eng):https://goo.gl/gxyd1X

Стоимость работ: от $25 час

тел/vbr/wsp: 79221236438
skype/tlgrm: t9221823420
email: t9221823420@gmail.com
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Преднастройка / конфигурирование переменных виджетов до вывода View php/xml/rss/twig?

Сообщение ElisDN »

t9221823420 писал(а): 2017.11.23, 15:46 ну а настройки где? $format, $value, и т.д.?
Приведите пример с $format и $value.
Аватара пользователя
t9221823420
Сообщения: 37
Зарегистрирован: 2017.08.23, 10:52
Контактная информация:

Re: Преднастройка / конфигурирование переменных виджетов до вывода View php/xml/rss/twig?

Сообщение t9221823420 »

дык я же привел - код сверху.

$value может быть каким угодно сложным

Вы сейчас мне пытаетесь показать как решается конкретный кусок кода - как его в twig завернуть я и сам знаю. Я не знаю как сделать так, чтобы этого НЕ делать
Ищу работу: https://goo.gl/WuGz1q
GitHub: https://goo.gl/2XAqy5
Резюме на HH (рус):https://goo.gl/Ay3YmC
Резюме на HH (eng):https://goo.gl/gxyd1X

Стоимость работ: от $25 час

тел/vbr/wsp: 79221236438
skype/tlgrm: t9221823420
email: t9221823420@gmail.com
Ответить