Страница 1 из 1
Получить доступ к чтению переменных в $this->template
Добавлено: 28.05.2016 15:07
mike2003
Захотел добавить на страницу просмотра темы viewtopic счетчик просмотров.
В viewtopic.php вроде нет таких данных. Значит надо в расширении получить номер топика и считать из БД topic_views. Правильно?
Но как получить номер?
Есть
Код: Выделить всё
$template->assign_vars...
'TOPIC_ID' => $topic_id,
но $this->template['TOPIC_ID'] не работает
Cannot use object of type phpbb\template\twig\twig as array in
Есть ли возможность считать те значения в расширении, что записаны в основном ядре через
$template->assign_vars
Re: Получить доступ к чтению переменных в $this->template
Добавлено: 28.05.2016 16:49
Sheer
Код: Выделить всё
/**
* Event to modify the SQL query before the post and poster data is retrieved
*
* @event core.viewtopic_get_post_data
* @var int forum_id Forum ID
* @var int topic_id Topic ID
* @var array topic_data Array with topic data
* @var array post_list Array with post_ids we are going to retrieve
* @var int sort_days Display posts of previous x days
* @var string sort_key Key the posts are sorted by
* @var string sort_dir Direction the posts are sorted by
* @var int start Pagination information
* @var array sql_ary The SQL array to get the data of posts and posters
* @since 3.1.0-a1
* @change 3.1.0-a2 Added vars forum_id, topic_id, topic_data, post_list, sort_days, sort_key, sort_dir, start
*/
$vars = array(
'forum_id',
'topic_id',
'topic_data',
'post_list',
'sort_days',
'sort_key',
'sort_dir',
'start',
'sql_ary',
);
extract($phpbb_dispatcher->trigger_event('core.viewtopic_get_post_data', compact($vars)));
Дальше объяснять надо?
Изучаем
Event List
Re: Получить доступ к чтению переменных в $this->template
Добавлено: 28.05.2016 17:03
mike2003
а если я хочу проверить U_ACP? неужели прочитать переменную нельзя, а только записать?
в других расширениях видел пишут же $this->config['name']
почему с config работает , а с template нет?
Re: Получить доступ к чтению переменных в $this->template
Добавлено: 28.05.2016 17:04
LavIgor
mike2003, можно, и способ есть.
Но в Вашем случае это ни к чему.
Просто используйте правильные события.
А U_ACP
вообще к шаблонам относится...
Re: Получить доступ к чтению переменных в $this->template
Добавлено: 28.05.2016 17:06
mike2003
LavIgor писал(а): можно, и способ есть.
какой?
LavIgor писал(а): вообще к шаблонам относится
я не хочу тратить время на обработку в php, если все равно это не будет выводиться в шаблоне
Отправлено спустя 2 минуты 9 секунд:
LavIgor писал(а): используйте правильные события
мне надо, что б обработка была только у админа. в событиях же этого нет
Re: Получить доступ к чтению переменных в $this->template
Добавлено: 28.05.2016 17:17
LavIgor
mike2003, чётко и по пунктам объясните, что хотите сделать.
$template
- это не массив, а объект. Через него считать переменные шаблона нельзя, только записать.
Но эти же переменные можно считать через другой объект, контекстный.
mike2003 писал(а): мне надо, что б обработка была только у админа
Что мешает посмотреть на
код, задающий эту самую переменную шаблона, и скопировать его туда, куда нужно?
Т.е. Вам нужно использовать проверку
$auth->acl_get('a_') && !empty($user->data['is_registered'])
, оба объекта задаются в конструкторе расширения совместно с остальными.
Не нужно использовать массив шаблонных переменных как источник данных, кроме как если это единственный способ достать нужные данные.
Re: Получить доступ к чтению переменных в $this->template
Добавлено: 28.05.2016 17:54
mike2003
LavIgor писал(а): эти же переменные можно считать через другой объект, контекстный.
как?
Re: Получить доступ к чтению переменных в $this->template
Добавлено: 28.05.2016 18:41
LavIgor
mike2003,
LavIgor писал(а): чётко и по пунктам объясните, что хотите сделать.
Я дал Вам правильный способ решения.
Сказать неправильный?
Re: Получить доступ к чтению переменных в $this->template
Добавлено: 28.05.2016 19:35
Sheer
mike2003 писал(а): я не хочу тратить время на обработку в php
Ну тогда забудьте навсегда про создание расширений.
mike2003 писал(а): видел пишут же $this->config['name']
Ну пишут.
$this->config['name']
будет доступно, если это самое
name
записано в таблицу БД
phpbb_config
- почувствуйте разницу.
mike2003 писал(а): а если я хочу проверить U_ACP?
U_ACP
- определена в функции
page_header()
, поэтому доступна везде и всегда. В любом шаблоне.
Re: Получить доступ к чтению переменных в $this->template
Добавлено: 28.05.2016 19:45
rxu
Делается примерно так.
Код: Выделить всё
$context = $phpbb_container->get('template_context');
$rootref = $context->get_root_ref();
$u_acp = isset($rootref['U_ACP']);
Если в конструктор слушателя передана зависимость сервиса
template_context
, то часть с
phpbb_container
, очевидно, не требуется.
Re: Получить доступ к чтению переменных в $this->template
Добавлено: 29.05.2016 2:16
mike2003
LavIgor писал(а): Я дал Вам правильный способ решения.
Сказать неправильный?
да я уже сделал, но интересно же!
Отправлено спустя 2 минуты 49 секунд:
Sheer писал(а): Ну тогда забудьте навсегда про создание расширений.
а какой смысл делать работу, если она все равно не выводится?
Re: Получить доступ к чтению переменных в $this->template
Добавлено: 07.05.2017 21:04
Алг
rxu писал(а): ↑28.05.2016 19:45$rootref = $context->get_root_ref();
опытным путем выяснилось, что через $rootref можно получить все значения объекта
$template
, (
$this->template->assign_vars
),
а команда
Код: Выделить всё
$dataref = &$this->template_context->get_data_ref();
даст нам все блоки переменных,
($this->template->assign_block_vars(...))