Шаблонизатор не возвращает текущий стиль в обработчике BB-кода

CrazyHackGUT

Проверенные
Сообщения
3,938
Решения
129
Реакции
9,108
Баллы
4,200
Есть некий BB-код. Он обрабатывается PHP-обработчиком.

Соль проблемы: вынес в настройки стиля некое стандартное значение, которое используется, если пользователь не указал своё.
Пробую получать его так:
PHP:
<?php
namespace Kruzya\xxxx\BbCode;

use XF\BbCode\Renderer\AbstractRenderer as Render;
use XF\Util\Random;
use XF\Util\Hash;

class xxxx {
  public static function renderXxxxxxx($tagChildren, $tagOption, $tag, array $options, Render $renderer) {
    $templater = $renderer->getTemplater();

    $tagContent = $renderer->renderSubTreePlain($tagChildren);
    $tagSize    = intval($tagOption);

    if ($tagSize == 0) {
      $style = $templater->getStyle()->getProperty('bbMyProperty', 256);
    }

    // ...
  }
}
Но вместо того, чтобы получить значение проперти, двиг валится с ошибкой, что я вызываю getProperty() над null элементом.
1537299321510.png

Вопрос следующий: почему шаблонизатор не отдаёт текущий стиль, и у всех ли так?
XF 2.0.7
 
.начнём с того, что всё он отдаёт
1537305426881.png

Только нахера такие костыли с настройками стиля?!!!!

НАХЕРА ЭТО?!

И, блин, вот такие истории (я про фигурные скобки) абсолютно нечитабельны, учитесь оформлять свой код нормально.
 
  1. Не вижу ничего плохого в переименовывании класса локально.
  2. Что плохого использовать "Настройки стиля", если они есть? Почему бы не дать возможность настроить стандартные параметры некого BB-кода для каждого стиля индивидуально?
  3. Всё читабельно. У меня своё видение читаемого кода, у Вас своё. Это нормально.
  4. Ну не возвращает, и всё. В противном случае, код выше не падал бы. Логично?
    Сейчас даже выявил более точный кейс, когда он не возвращает. Т.к. тестирую на личных диалогах, то часто тыкаю на "Предпросмотр" и "Ответить". Вот если сообщение уже было оставлено раннее, то там стиль возвращается для него. А для данных действий, которые производятся по AJAX - нет.
В любом случае, вынес это в шаблон. Но мне интересно, чем именно вызвано такое поведение.
 
Последнее редактирование:
Насколько я понял, свойство style в классе templater равно null, потому что никто не вызвал функцию $templater->setStyle(...) или $this->setStyle() внутри самого темплейтера. Либо сами получайте стиль и вызывайте setStyle а потом geStyle, либо ищите как получить свойство по-другому. Попробуйте где-то найти экземпляр класса Style implements \ArrayAccess и через него вызывайте getProperty.
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу