Как получить доступ к переменной ветки разметки из кода в OctoberCMS - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь получить доступ к переменной из разметки (Twig) в модуле кода octoberCMS. Эта переменная печатается в l oop плагином.

У меня есть эта переменная в разметке:

{% set frontId = record.id %}
{{frontId}}

И я хочу получить доступ к {{ frontId } } Переменное это в модуле кода.

function onStart()
{
    $this["slots"] =  Db::table('oblikovanje_izobrazevanja_vnos')->where('id', $frontId)->value('free_slots');
    echo $frontId;
}

1 Ответ

2 голосов
/ 10 февраля 2020

Хм, к сожалению, вы не можете передавать переменные из секции Markup в Code. Поскольку секция Code в целом выполняется до Markup, поэтому вы не можете этого сделать.

Кажется, вы используете компонент Record details Builder, поэтому вы должны передавать :id из URL

Решение 1 [использовать параметр]

function onStart() { // you can use onEnd as well
    $frontId = $this->param('id'); // this will get :id param from url

    // now slots variable are available in `Markup section`    
    $this["slots"] =  Db::table('oblikovanje_izobrazevanja_vnos')->where('id', $frontId)->value('free_slots');

}

Решение 2 [вы можете использовать глобальный компонентный массив с его псевдоним, обязательно используйте onEnd ловушку жизненного цикла]

function onEnd () { // you must use onEnd as at this moment all components are initialized properly 

    // we can access component from $this->components with alias name and get its details
    $frontId = $this->components['builderDetails']->record->id;

    // now slots variable are available in `Markup section`    
    $this["slots"] =  Db::table('oblikovanje_izobrazevanja_vnos')->where('id', $frontId)->value('free_slots');

}

Справочный снимок экрана

enter image description here

если есть сомнения, прокомментируйте.

...