Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Получить доступ к чтению переменных в $this->template

Форум для авторов расширений для phpBB. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
mike2003
phpBB 2.0.5
Сообщения: 452
Стаж: 8 лет
Благодарил (а): 27 раз
Поблагодарили: 8 раз

Получить доступ к чтению переменных в $this->template

Сообщение 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
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 1 месяц
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2752 раза
Контактная информация:

Re: Получить доступ к чтению переменных в $this->template

Сообщение 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
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
mike2003
phpBB 2.0.5
Сообщения: 452
Стаж: 8 лет
Благодарил (а): 27 раз
Поблагодарили: 8 раз

Re: Получить доступ к чтению переменных в $this->template

Сообщение mike2003 »

а если я хочу проверить U_ACP? неужели прочитать переменную нельзя, а только записать?
в других расширениях видел пишут же $this->config['name']
почему с config работает , а с template нет?
Последний раз редактировалось mike2003 28.05.2016 17:05, всего редактировалось 1 раз.
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 9 лет 11 месяцев
Благодарил (а): 41 раз
Поблагодарили: 932 раза

Re: Получить доступ к чтению переменных в $this->template

Сообщение LavIgor »

mike2003, можно, и способ есть.
Но в Вашем случае это ни к чему.
Просто используйте правильные события.

А U_ACP вообще к шаблонам относится...
Аватара пользователя
mike2003
phpBB 2.0.5
Сообщения: 452
Стаж: 8 лет
Благодарил (а): 27 раз
Поблагодарили: 8 раз

Re: Получить доступ к чтению переменных в $this->template

Сообщение mike2003 »

LavIgor писал(а): можно, и способ есть.
какой?
LavIgor писал(а): вообще к шаблонам относится
я не хочу тратить время на обработку в php, если все равно это не будет выводиться в шаблоне

Отправлено спустя 2 минуты 9 секунд:
LavIgor писал(а): используйте правильные события
мне надо, что б обработка была только у админа. в событиях же этого нет
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 9 лет 11 месяцев
Благодарил (а): 41 раз
Поблагодарили: 932 раза

Re: Получить доступ к чтению переменных в $this->template

Сообщение LavIgor »

mike2003, чётко и по пунктам объясните, что хотите сделать.
$template - это не массив, а объект. Через него считать переменные шаблона нельзя, только записать.
Но эти же переменные можно считать через другой объект, контекстный.
mike2003 писал(а): мне надо, что б обработка была только у админа
Что мешает посмотреть на код, задающий эту самую переменную шаблона, и скопировать его туда, куда нужно?

Т.е. Вам нужно использовать проверку $auth->acl_get('a_') && !empty($user->data['is_registered']), оба объекта задаются в конструкторе расширения совместно с остальными.

Не нужно использовать массив шаблонных переменных как источник данных, кроме как если это единственный способ достать нужные данные.
Аватара пользователя
mike2003
phpBB 2.0.5
Сообщения: 452
Стаж: 8 лет
Благодарил (а): 27 раз
Поблагодарили: 8 раз

Re: Получить доступ к чтению переменных в $this->template

Сообщение mike2003 »

LavIgor писал(а): эти же переменные можно считать через другой объект, контекстный.
как?
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 9 лет 11 месяцев
Благодарил (а): 41 раз
Поблагодарили: 932 раза

Re: Получить доступ к чтению переменных в $this->template

Сообщение LavIgor »

mike2003,
LavIgor писал(а):Что мешает посмотреть на код, задающий эту самую переменную шаблона, и скопировать его туда, куда нужно?
LavIgor писал(а): чётко и по пунктам объясните, что хотите сделать.
Я дал Вам правильный способ решения.
Сказать неправильный?
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 1 месяц
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2752 раза
Контактная информация:

Re: Получить доступ к чтению переменных в $this->template

Сообщение Sheer »

mike2003 писал(а): я не хочу тратить время на обработку в php
Ну тогда забудьте навсегда про создание расширений.
mike2003 писал(а): видел пишут же $this->config['name']
Ну пишут. $this->config['name'] будет доступно, если это самое name записано в таблицу БД phpbb_config - почувствуйте разницу.
mike2003 писал(а): а если я хочу проверить U_ACP?
U_ACP - определена в функции page_header(), поэтому доступна везде и всегда. В любом шаблоне.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

Re: Получить доступ к чтению переменных в $this->template

Сообщение rxu »

Делается примерно так.

Код: Выделить всё

$context = $phpbb_container->get('template_context');
$rootref = $context->get_root_ref();
$u_acp = isset($rootref['U_ACP']);
Если в конструктор слушателя передана зависимость сервиса template_context, то часть с phpbb_container, очевидно, не требуется.
Изображение
Аватара пользователя
mike2003
phpBB 2.0.5
Сообщения: 452
Стаж: 8 лет
Благодарил (а): 27 раз
Поблагодарили: 8 раз

Re: Получить доступ к чтению переменных в $this->template

Сообщение mike2003 »

LavIgor писал(а): Я дал Вам правильный способ решения.
Сказать неправильный?
да я уже сделал, но интересно же!

Отправлено спустя 2 минуты 49 секунд:
Sheer писал(а): Ну тогда забудьте навсегда про создание расширений.
а какой смысл делать работу, если она все равно не выводится?
Аватара пользователя
Алг
Former team member
Сообщения: 933
Стаж: 11 лет 7 месяцев
Откуда: Израиль
Благодарил (а): 85 раз
Поблагодарили: 305 раз
Контактная информация:

Re: Получить доступ к чтению переменных в $this->template

Сообщение Алг »

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(...))
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов
Ответить

Вернуться в «Для разработчиков»