Уважаемые пользователи!
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 2.0.x.
Аватара пользователя
ALER
phpBB 2.0.0
Сообщения: 214
Стаж: 19 лет 4 месяца
Откуда: Москва

Не могу выбрать вариант кода

Сообщение ALER »

Вот какой у меня возник вопрос. Занимаюсь переделкой аттач-мода для чисто текстового стиля и не могу принять решение. Дело в том, что одно и то же можно сделать тремя путями.

Речь идет о доработке viewforum.php - обозначение вложения в начале заголовка топика.

В массиве переменных для tpl-файла при установке мода добавляется такая строка:

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

'TOPIC_ATTACHMENT_IMG' => topic_attachment_image($topic_rowset[$i]['topic_attachment']),
Мне нужно сделать в этом же массиве 'TOPIC_ATTACHMENT_TXT' по условию: если 'TOPIC_ATTACHMENT_IMG' равен '' (пустое место, нет "скрепки"), то и 'TOPIC_ATTACHMENT_TXT' - пуст. Если же 'TOPIC_ATTACHMENT_IMG' означает вывод "скрепки", то 'TOPIC_ATTACHMENT_TXT' это некий символ (неважно сейчас как он получается, пусть пока будет $lang['Symbol_attachment'].

Первый вариант - самый громоздкий. Перед определением массива я через if - else проверяю значение

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

topic_attachment_image($topic_rowset[$i]['topic_attachment']) == ''
и присваиваю переменной $topic_attachment_txt значение '' или $lang['Symbol_attachment']. Затем в массиве помещаю строку:

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

'TOPIC_ATTACHMENT_TXT' => $topic_attachment_txt,
Второй путь более компактный. Перед определением массива даю такую строку:

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

$topic_attachment_txt = ( topic_attachment_image($topic_rowset[$i]['topic_attachment']) == '' ) ? '' : $lang['Symbol_attachment'];
И та же строка в массиве:

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

'TOPIC_ATTACHMENT_TXT' => $topic_attachment_txt,
Третий путь - самый компактный. Последняя логическая формула размещается прямо правой части массива, т. е. после строки, процитированной самой первой (добавление, сделанное при установке мода), помещаю следующую:

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

'TOPIC_ATTACHMENT_TXT' => ( topic_attachment_image($topic_rowset[$i]['topic_attachment']) == '' ) ? '' : $lang['Symbol_attachment'],
Все три варианта проверены и работают на тестовом форуме. Но у меня нет уверенности, что при последнем, самом компактном варианте, в каких-то, неизвестных мне условиях, не возникнут проблемы...

Прошу гуру дать ответ: можно ли быть уверенным, что с третьим вариантом все будет в порядке.

И сразу еще один вопрос. Смотрим опять первую процитированную строку: справа от => нет символа $, хотя все остальные строки в правой части массива начинаются с "доллара". Или это связано с тем, что topic_attachment_image не переменная, а функция? В attach_mod/displaying.php нашел такую строку:

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

function topic_attachment_image($switch_attachment)
Прошу извинить, если вопросы идиотские, но я как не знал PHP, так и не знаю, только пытаюсь разобраться в текстах программ форума.
Алексей aka ALER
Lanior
phpBB 1.4.4
Сообщения: 144
Стаж: 18 лет 8 месяцев

Сообщение Lanior »

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

$topic_attachent_img = topic_attachment_image($topic_rowset[$i]['topic_attachment']);
...
'TOPIC_ATTACHMENT_IMG' => $topic_attachent_img,
...
'TOPIC_ATTACHMENT_TXT' => (empty($topic_attachent_img)) ? '' : $lang['Symbol_attachment'],
Дабы не дергать форум лишним вызовом функции.
Аватара пользователя
ALER
phpBB 2.0.0
Сообщения: 214
Стаж: 19 лет 4 месяца
Откуда: Москва

Сообщение ALER »

Lanior
Понял главное: третий вариант (условный оператор прямо в определении массива) проблем не вызовет. Я не хочу менять штатные строки, предпочитаю их дополнять своими добавками.

Спасибо.
Алексей aka ALER
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

ALER
Я бы воспользовался советом Lanior. Гонять процедуру 2 раза вместо 1, тем более в таком большом цикле как viewforum весьма расточительно. А чтобы если что легко найти старый фрагмент просто выше ваших изменений вставляете вот это

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

// 'TOPIC_ATTACHMENT_IMG' => topic_attachment_image($topic_rowset[$i]['topic_attachment']),
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
ALER
phpBB 2.0.0
Сообщения: 214
Стаж: 19 лет 4 месяца
Откуда: Москва

Сообщение ALER »

Понял, благодарю. И это еще одно подтверждение, что условный оператор можно использовать внутри определения массива.
Алексей aka ALER

Вернуться в «Для авторов (phpBB 2.0.x)»