1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

Как с глобального регистра достать GET параметр

Тема в разделе "Вопросы и ответы по XenForo Framework", создана пользователем garikm, 04.06.2014.

Загрузка
  1. garikm

    garikm Пользователь

    Регистрация:
    19.12.13
    Сообщения:
    9
    Симпатии:
    1
    Версия XF:
    1.2.4
    Пишу плагин bb codes - в генерируемом коде тега нужен номер айди текущей темы:

    PHP:
    class Myproject_BbCode_Formatter{
    public function 
    renderTagTest(array $tag, array $rendererStates) {
    .........
    //здесь нужно достать текущий thread_id
    Подскажите, пожалуйста, перепробовал кучу вариантов - вроде бы элементарная задача... но решения нет..

    Хотелось бы как-то так:
    $this->_input->filterSingle('thread_id', XenForo_Input::UINT);
    или
    $_input = new XenForo_Input($_REQUEST);
    $_input->filter(array('thread_id' => XenForo_Input::UINT));
    $data = $_input->getInput();
    или
    XenForo_Application::get('request')->getParam('thread_id')
     
  2. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Так как этот параметр берется из строки запроса, то можете самостоятельно распарсить данную строку. А _input в Вашем классе просто недоступен.
     
    garikm нравится это.
  3. garikm

    garikm Пользователь

    Регистрация:
    19.12.13
    Сообщения:
    9
    Симпатии:
    1
    Версия XF:
    1.2.4
    Спасибо. Конечно, я понимаю, что недоступен. Просто хотелось бы с регистра такие параметры доставать, что-то типа XenForo_Application::get('request')->getParam('thread_id') . А так, каждый раз доставать параметры через парсинг uri строки - как-то не правильно....
     
  4. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Ну тогда придется либо повторять довольно непростую процедуру парсинга параметров через штатную. Либо придется найти нужное место с доступным input, откуда можно будет сохранить в регистр переменную, которую впоследствии можно уже будет достать из любого другого места. Естественно, что для этого придется с помощью плагина расширять нужный класс (скорее всего, контроллер темы).
    --- добавлено : 5 июн 2014 в 13:41 ---
    Теоретически достаточно будет расширить класс XenForo_ControllerPublic_Thread. Т.е. в методе actionIndex сначала нужно в регистр сохранить параметр:
    Код:
    XenForo_Application::$_registry->set('thread_id',$threadId);
    Ну а затем извлечь его в нужно месте:
    Код:
    XenForo_Application::$_registry->get('thread_id');
    Конечно, это не самый лучший вариант использования регистра, но лучше, чем по новой парсить запрос :)
     
    Последнее редактирование модератором: 13.06.2014
  5. garikm

    garikm Пользователь

    Регистрация:
    19.12.13
    Сообщения:
    9
    Симпатии:
    1
    Версия XF:
    1.2.4
  6. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Ну вот. А я даже и не знал о такой глобальной переменной :)
     
  7. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    Еще можно так :)
    PHP:
    $input = new XenForo_Input(new Zend_Request_Http());
    $thread_id $input->filterSingle('thread_id'XenForo_Input::UINT);
     
    Mirovinger нравится это.

Поделиться этой страницей