Concrete5 - Почему мой контроллер блока set() не работает?
У меня есть пользовательский блок, который имеет вид по умолчанию с формой в нем. Когда эта форма отправлена, я установил флаг контроллера, и блок был (должен быть) обновлен для отображения дополнительной информации.
Проблема в том, что я считаю, что у меня нет данных / переменных.
controller.php
public $unlocked = false;
public $employer;
public $shortname = "not loaded";
public function on_page_view() { //already overridden because I'm compiling LESS
...
$this->setViewVariables();
}
function setViewVariables() {
$this->set('shortname', $this->shortname);
$this->set('is_unlocked', $this->unlocked);
...
}
public function action_accesscode_unlock() {
$this->unlocked = true;
$this->shortname = "fred";
//Have also tried calling $this->setViewVariables(); as well,
//before I realised view() and on_page_view() were called after this anyway
}
view.php
<?php if ( !$is_unlocked ) {
echo $shortname; //does correctly display the default value
?>
<form action="<?php echo $this->action('accesscode_unlock')?>" id="accessform" method="post">
...
</form>
<?php } else {
//THIS section is never displayed (always reloads form with default name)
echo $shortname;
} ?>
Что я делаю не так, чтобы новые значения переменных никогда не устанавливались в представлении?
редактировать
После ответа на JohnTheFish, который я только что понял, код компиляции LESS, который я использую, включает в себя следующие строки (используемые для получения пути блока). Может ли это быть изменением экземпляра, используемого для разных частей жизненного цикла?
$bv = new BlockView();
$bv->setController($this);
$bv->setBlockObject($this->getBlockObject());
1 ответ
on_page_view выполняется до action_accesscode_unlock, поэтому логика action_accesscode_unlock не происходит до тех пор, пока не установлены переменные.
Вы можете попробовать добавить вызов setViewVariables в конец action_accesscode_unlock.
(В ответ на ваше редактирование, да, это может)