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

Форум для авторов модов для phpBB 2.0.x. Здесь можно попросить помощи в разработке у коллег.

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

Сообщение ALER 31.07.2007 23:26

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

Речь идет о доработке 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
Аватара пользователя
ALER
phpBB 2.0.4
 
Сообщения: 214
Зарегистрирован: 09.12.2004 0:00
Откуда: Москва


Сообщение Lanior 01.08.2007 0:56

Код: Выделить всё
$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'],

Дабы не дергать форум лишним вызовом функции.
Lanior
phpBB 2.0.1
 
Сообщения: 145
Зарегистрирован: 13.08.2005 0:21

Сообщение ALER 01.08.2007 8:49

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

Спасибо.
Алексей aka ALER
Аватара пользователя
ALER
phpBB 2.0.4
 
Сообщения: 214
Зарегистрирован: 09.12.2004 0:00
Откуда: Москва

Сообщение Xpert 01.08.2007 9:23

ALER
Я бы воспользовался советом Lanior. Гонять процедуру 2 раза вместо 1, тем более в таком большом цикле как viewforum весьма расточительно. А чтобы если что легко найти старый фрагмент просто выше ваших изменений вставляете вот это
Код: Выделить всё
// 'TOPIC_ATTACHMENT_IMG' => topic_attachment_image($topic_rowset[$i]['topic_attachment']),
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Xpert
phpBB Guru
 
Сообщения: 5636
Зарегистрирован: 13.03.2004 21:27
Откуда: msk.ru

Сообщение ALER 01.08.2007 10:04

Понял, благодарю. И это еще одно подтверждение, что условный оператор можно использовать внутри определения массива.
Алексей aka ALER
Аватара пользователя
ALER
phpBB 2.0.4
 
Сообщения: 214
Зарегистрирован: 09.12.2004 0:00
Откуда: Москва


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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0