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

Расширения - это просто!

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Алг
Former team member
Сообщения: 933
Стаж: 11 лет 8 месяцев
Откуда: Израиль
Благодарил (а): 73 раза
Поблагодарили: 248 раз

Re: Расширения - это просто!

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

xisp писал(а):Вопрос- изменять шаблоны как-то можно, или только дополнять?
тот же вопрос
Есть у меня к примеру блок переменных searchresults и в search_results.html надо, чтобы пользователь видел не все строки, а по условию. Условие S_TOPIC_SHOW в шаблон добавила, нашла только два подходящих события topiclist_row_prepend и topiclist_row_append, вставила в topiclist_row_prepend , а в topiclist_row_append

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

-->
S_TOPIC_SHOW = {searchresults.S_TOPIC_SHOW}
получается такая картина
picTopics.png
т.е. данные события заменили только названия топика, а нужно, чтобы они воздействовали на всю строку, в данном случае не показывали строку с темой, у которой S_TOPIC_SHOW=0

Как быть и что делать?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16365
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1744 раза

Re: Расширения - это просто!

Сообщение rxu »

Алг писал(а):тот же вопрос
Концепция расширений в том, чтобы вообще не вмешиваться в код - ничего не изменять, ничего не добавлять в структуру папок и файлов собственно phpBB.
Алг писал(а):S_TOPIC_SHOW = {searchresults.S_TOPIC_SHOW}
Это прямо в шаблоне забито? Приведите код полностью.
События шаблонов, как правило, используются в паре с событиями ядра, в данном случае есть событие core.search_modify_tpl_ary в search.php, предназначенное для изменения как раз вывода результатов. Например, можно что угодно добавить или поменять в массиве $tpl_ary, где происходит присвоение значений переменным шаблона. В т.ч. добавить условия для S_TOPIC_SHOW.
Изображение
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2209
Стаж: 16 лет 4 месяца
Откуда: Павлодар
Благодарил (а): 5 раз
Поблагодарили: 153 раза

Re: Расширения - это просто!

Сообщение nissin »

viewforum.php

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

		/**
		* Modify the topic data before it is assigned to the template
		*
		* @event core.viewforum_modify_topicrow
		* @var	array	row			Array with topic data
		* @var	array	topic_row	Template array with topic data
		* @since 3.1-A1
		*/
Всё повторяется. nurlan.info
Аватара пользователя
Алг
Former team member
Сообщения: 933
Стаж: 11 лет 8 месяцев
Откуда: Израиль
Благодарил (а): 73 раза
Поблагодарили: 248 раз

Re: Расширения - это просто!

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

rxu писал(а):Например, можно что угодно добавить или поменять в массиве $tpl_ary, где происходит присвоение значений переменным шаблона. В т.ч. добавить условия для S_TOPIC_SHOW.
именно так и делала.
listener.php

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

	static public function getSubscribedEvents()
	{
		return array(
            'core.user_setup'		                => 'user_setup',
            'core.search_get_topic_data'		=> 'search_get_topic_data',
           [color=#0000FF] 'core.search_modify_tpl_ary'		=> 'display_search_result',[/color]
  
		);
	}

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

    public function display_search_result($event)
    {
        if (!isset($event['row']) || !isset($event['tpl_ary'])) return;
        
        $row = $event['row'];
        $is_visible = ...[color=#008000]( тут условия)[/color];
  
            [color=#0000FF]// if (!$is_visible) unset($event['tpl_ary']); //хотела удалить из темплейта ещё на этом этапе, но не сработало[/color]
 
        $event['tpl_ary'] = array_merge($event['tpl_ary'], array(
	        'S_TOPIC_SHOW'		=> $is_visible,
        ));      
   
    }
И теперь мне не хватает событий шаблона, чтобы манипулировать добавленным параметром

Добавлено спустя 8 минут 46 секунд:
rxu писал(а):Это прямо в шаблоне забито? Приведите код полностью.
styles/all/template/event/topiclist_row_prepend.html styles/all/template/event/topiclist_row_append.html

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

-->
S_TOPIC_SHOW = {searchresults.S_TOPIC_SHOW}
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16365
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1744 раза

Re: Расширения - это просто!

Сообщение rxu »

Делается так:

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

    public function display_search_result($event)
    {
        $row = $event['row'];
        $tpl_ary = $event['tpl_ary'];
        $is_visible = 'тут_условие';
  
// что-то удалить тоже можно здесь
 
        $tpl_ary = array_merge($tpl_ary, array(
	        'S_TOPIC_SHOW'		=> $is_visible,
        ));

       $event['tpl_ary'] = $tpl_ary;
   
    }
Напрямик работать с $event нельзя - будет выдавать ошибки. Сначала присваивается значение переменной локального масштаба, потом происходит обратное присвоение.
Алг писал(а):И теперь мне не хватает событий шаблона, чтобы манипулировать добавленным параметром
Какого именно события, что должно происходить? Может, сделать это как раз в событии ядра?

Добавлено спустя 51 секунду:
Алг писал(а):S_TOPIC_SHOW = {searchresults.S_TOPIC_SHOW}
В шаблонах такие присвоения невозможны, только сравнение по условию.
Изображение
Аватара пользователя
Алг
Former team member
Сообщения: 933
Стаж: 11 лет 8 месяцев
Откуда: Израиль
Благодарил (а): 73 раза
Поблагодарили: 248 раз

Re: Расширения - это просто!

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

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

$event['tpl_ary'] = array_merge($event['tpl_ary'], array(
	        'S_TOPIC_SHOW'		=> $is_visible,
        ));     
это сработало
Я выше добавила, что в событии ядра хотела удалить строку, ошибки не было, но и удаления тоже.
Не хватает события шаблона, чтобы можно было заменить весь код между

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

<!-- BEGIN searchresults -->....<!-- END searchresults -->
Добавлено спустя 8 минут 43 секунды:
rxu писал(а):В шаблонах такие присвоения невозможны, только сравнение по условию.
Я Вас не поняла, я в шаблоне и хочу воспользоваться этим условием, а вывела его только для отладки, чтобы видеть, что оно работает правильно. Я бы хотела сделать в шаблоне следующее:

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

	<!-- BEGIN searchresults -->
            <!-- IF searchresults.S_TOPIC_SHOW-->
.......
           <!-- ENDIF -->
		<!-- END searchresults -->
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16365
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1744 раза

Re: Расширения - это просто!

Сообщение rxu »

Алг писал(а):в событии ядра хотела удалить строку, ошибки не было, но и удаления тоже.
Наверное, тут можно попробовать

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

$tpl_ary = array();
Это приведет к обнулению массива и, соответственно, в шаблон ничего вывестись не должно.
Либо можно попробовать вообще

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

$tpl_ary = NULL;
Но сам такое пока не пробовал.
Алг писал(а):Я Вас не поняла, я в шаблоне и хочу воспользоваться этим условием
Что конкретно должно делать данное расширение? Каково техзадание, так сказать? :)
Изображение
Аватара пользователя
Алг
Former team member
Сообщения: 933
Стаж: 11 лет 8 месяцев
Откуда: Израиль
Благодарил (а): 73 раза
Поблагодарили: 248 раз

Re: Расширения - это просто!

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

rxu писал(а):Что конкретно должно делать данное расширение? Каково техзадание, так сказать?
Есть у меня несколько "хитрых" форумов, видимость форума дана всем, включая гостей, а видеть темы или посты могут не все(у каждого форума свои правила)
Сейчас хотела сделать, чтобы видеть темы из одного из таких форумов мог только их автор и участники определённой группы
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2209
Стаж: 16 лет 4 месяца
Откуда: Павлодар
Благодарил (а): 5 раз
Поблагодарили: 153 раза

Re: Расширения - это просто!

Сообщение nissin »

Алг писал(а): Не хватает события шаблона, чтобы можно было заменить весь код между

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

<!-- BEGIN searchresults -->....<!-- END searchresults -->
Я думаю, что можно сделать запрос на area51.
Для вывода результатов поиска в формате сообщений есть:

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

<!-- EVENT search_results_post_before -->
<!-- EVENT search_results_post_after -->
можно сделать аналогичные

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

<!-- EVENT search_results_topic_before -->
<!-- EVENT search_results_topic_after -->
Всё повторяется. nurlan.info
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16365
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1744 раза

Re: Расширения - это просто!

Сообщение rxu »

nissin писал(а):Я думаю, что можно сделать запрос на area51.
Не обязательно. Я могу создать тикет и пулл реквест. Хотя, в принципе, может любой :)

Добавлено спустя 7 минут 19 секунд:
Там, по идее, надо еще одно событие ядра добавлять, для $rowset.

Добавлено спустя 1 минуту 20 секунд:
nissin писал(а):можно сделать аналогичные
Поддерживаю. Странно, что их одновременно не добавили.

Добавлено спустя 19 минут 48 секунд:
Добавил тикет https://tracker.phpbb.com/browse/PHPBB3-12523
PR https://github.com/phpbb/phpbb/pull/2436

Добавлено спустя 28 минут 4 секунды:
Событие ядра:
тикет: https://tracker.phpbb.com/browse/PHPBB3-12524
патч: https://github.com/phpbb/phpbb/pull/2437

Добавлено спустя 2 часа 18 минут 33 секунды:
Уже в ядре. Можете добавить (или взять из текущего репо phpBB) и использовать.

Добавлено спустя 26 минут 12 секунд:
rxu писал(а):Событие ядра:
тикет: https://tracker.phpbb.com/browse/PHPBB3-12524
патч: https://github.com/phpbb/phpbb/pull/2437
Тоже уже в ядре.
Изображение
Аватара пользователя
Алг
Former team member
Сообщения: 933
Стаж: 11 лет 8 месяцев
Откуда: Израиль
Благодарил (а): 73 раза
Поблагодарили: 248 раз

Re: Расширения - это просто!

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

круто, так быстро добавили :)
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов
Аватара пользователя
Алг
Former team member
Сообщения: 933
Стаж: 11 лет 8 месяцев
Откуда: Израиль
Благодарил (а): 73 раза
Поблагодарили: 248 раз

Re: Расширения - это просто!

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

попробовала оба события, все просто замечательно.
rxu писал(а): Наверное, тут можно попробовать
КОД: ВЫДЕЛИТЬ ВСЁ
$tpl_ary = array();

Это приведет к обнулению массива и, соответственно, в шаблон ничего вывестись не должно.
Либо можно попробовать вообще
КОД: ВЫДЕЛИТЬ ВСЁ
$tpl_ary = NULL;

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

Добавлено спустя 2 минуты 6 секунд:
Вообще довольно увлекательно оказалось писать расширение. :)
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов
Аватара пользователя
xisp
phpBB 3.0.0 RC7
Сообщения: 1798
Стаж: 11 лет 11 месяцев
Благодарил (а): 101 раз
Поблагодарили: 91 раз
Забанен: Бессрочно

Re: Расширения - это просто!

Сообщение xisp »

Алг писал(а):Вообще довольно увлекательно оказалось писать расширение.
Это просто в новинку. Потом надоест прописывать в кучу разных файлов одни и те же значения, соблюдать порядок аргументов в вызове в конструкторе и т.д.
Думаю, скоро появится генератор расширений, делающий эту рутинную работу. Вот тогда станет веселее.
phpBBex
Аватара пользователя
Алг
Former team member
Сообщения: 933
Стаж: 11 лет 8 месяцев
Откуда: Израиль
Благодарил (а): 73 раза
Поблагодарили: 248 раз

Re: Расширения - это просто!

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

Непременно появится, я даже не сомневаюсь. А сейчас вместо рутинной работы сделала копи-паст с существующего расширения, а далее примеряла, в какие события ядра и шаблона можно вклиниться.
Мне такой подход расширения вместо модов вообще импонирует, моды я в 3.0 и так старалась писать через хуки, не затрагивая стандарных файлов движка, а теперь уж "мы вдвое больше сена для своей коровки припасём"... :)
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов
Аватара пользователя
xisp
phpBB 3.0.0 RC7
Сообщения: 1798
Стаж: 11 лет 11 месяцев
Благодарил (а): 101 раз
Поблагодарили: 91 раз
Забанен: Бессрочно

Re: Расширения - это просто!

Сообщение xisp »

Лично я по старому буду, для себя.
phpBBex

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