шаблон c собачкой (@) или все же без

Marquis

Новичок
шаблон c собачкой (@) или все же без

Почитав посты про шаблоны на форуме встал в небольшой тупик.
До сегодняшнего дня все переменные в html шаблонах выводил в виде
PHP:
<?=@$MyValue?>
например, в формах редактирования/добавления информации т.к. при редактировании переменные сущесвуют при добавлении этих самых переменных не зарегистрировано.
Я не фанат монстров типо Смарти, но хотелось бы по возможности отказаться от лишних условий провери переменных в шаблонах, поэтому и приходится использовать @ дабы заглушить сообщения типа "Undefined variable: ..."

Сам пока вижу 2 варианта:
1 в скрипте по дефолту создать массив с нулевыми значениями, и при редактировании информации заполнять изначально пустой массив данными например из БД.

2 Писать переменные в шаблонах с собачкой заглушая таким образом нотисы. (лично я не вижу чем мне грозит использование @ в шаблонах, т.к. я на все 100% уверен в логике скрипта )

Прошу подсказать как правильно было бы принтовать значения переменных в html шаблоне не используя в шаблоне if'ов проверяющих существование переменной.

бесят куски кода в html шаблоне типа:
PHP:
if (isset($MyVar)) {
 foreach ($MyVar as key => value) {
 }
}
которые реально стопарят всю работу верстальщика.
Поэтому хотелось бы найти способ отказаться в этом примере от проверки
PHP:
if (isset($MyVar)) {}}
Таким образом упростить жизнь верстальщику.
 

denver

?>Скриптер
.к. я на все 100% уверен в логике скрипта
Ну так и не юзайте свсем собаку.

В корректном сурскоде @ нужна только очччень изредка (@fopen, @mysql_query и т.п.) и только тогда когда есть собственный обработчик ошибки (@fopen(...) or die('...'); )

Нотисы это то что "канает" в силу нестрогости PHP но может оказаться и дырой. Так что если вы 100% уверены в коде то юзайте error_reporting(E_ALL) и отказывайтесь от собак:
<?=$MyValue?> не будет никогда ругаться если такая переменная была инициализирована хотя бы пустым значением (или массивом, etc).

А если вам "до фени" и смысл только в подавлении нотисов то вас вероятно больше устроит:
error_reporting(E_ALL ^ E_NOTICE)
который их выводить не будет.
 

Фанат

oncle terrible
Команда форума
denver
ты бредишь. как всегда, впрочем.
наличие собственного обработчика НЕ ЯВЛЯЕТСЯ поводом ствить собаку.

-~{}~ 15.07.06 11:59:

бесят куски кода в html шаблоне типа:

if (isset($MyVar)) {
foreach (as key => value) {
}
}
я фигею.
Как вообще можно было догадаться ТАКОЕ в шаблоне!

а решить эту проблему очень просто.
совсем просто.
всего лишь, в момент обработки шаблона в скрипте ДОЛЖЕН быть определён массив $MyVar. Пусть даже пустой.

-~{}~ 15.07.06 12:02:

Причём это касается не только шаблонов, но и вообще любого кода.
 

vafel

Новичок
используй начальную инициализацию всех переменных чтоб заведомо небыло необходимости собаку ставить
 

Marquis

Новичок
С инициализацией переменных немножко ступил, ессно массив должен быть определен изначально.
Переделал немножко конструкцию принта значений из массива, получилось следующее:
PHP:
$i=0;
while($i < count($array)) {
 echo $array[$i]['field'];
   $i++;
}
Сложно ли будет верстальщику понять такую конструкцию?
Или чем ее лучше заменить или поправить.
 

denver

?>Скриптер
Marquis
Спросите своего верстальщика :)
Я думаю ему одинаково foreach там или while

ЗЫ. Гуманизм глазами программера хехе)
 

Фанат

oncle terrible
Команда форума
Marquis
чем тебя не устраивает foreach?
зачем в шаблоне эхо?
зачем в шаблоне инициализация переменной??
зачем в шаблоне вычисление размера массива???
чем ее лучше заменить
PHP:
<table>
<? foreach ($MyVar as key => value): ?>
<tr><td><?=$key?></td><td><?=$value?></td></tr>
<? endforeach ?>
</table>
 

Marquis

Новичок
чем тебя не устраивает foreach?
зачем в шаблоне инициализация переменной??
зачем в шаблоне вычисление размера массива???
Т.к. верстальщики кроме html знают еще и JS вот я и решил что, конструкции похожие на те которые используют они в JS будут им более понятны. А в JS как раз и делают конструкции похожие на мой последний пример.

зачем в шаблоне эхо?
В шаблоне у меня <?=$MyVar?> используется, сорри на форуме запостил не совсем правильный вариант.

eXtreme
Мне нафик не нужны все эти Темплейтеры, т.к. сам PHP отлично справляется с ролью Темплейтера.
 

Фанат

oncle terrible
Команда форума
верстальщики кроме html знают еще и JS
ЭТО ПОВОД ПИХАТЬ В ШАБЛОН ТО, ЧТО ДОЛЖНО БЫТЬ В СКРИПТЕ??
оригинально.
ты вообще собираешься отделать шаблон от кода? по твоим примерам это незаметно!
сорри на форуме запостил не совсем правильный вариант.
меня УБИВАЮТ такие отмазки.
человек лепит какой-то бред с потолка, потом делает невинные глазки и говорит "подскажите, как это улучшить!".
 

Фанат

oncle terrible
Команда форума
в следующий раз будешь просто забанен. вместе со своим ню-ню.
 

Фанат

oncle terrible
Команда форума
неуважение к форуму, выказанное в самой отвратительной форме - просьба исправить заведомо неправильный вариант.
впрочем, если кого интересует буква правил - там есть соответствующий пункт.
 

Marquis

Новичок
Столкнулся с новой задачей.
Предположим есть массив данных $array содердимое массива примерно следующее:
PHP:
$array = array();

$array = array(
	array("name" => "Название 1", "description" => "Описание 1"),
	array("name" => "Название 2", "description" => "Описание 2"),
	array("name" => "Название 3", "description" => "Описание 3"),
);
Необходимо в шаблоне вывести список из этого массива, с помощью фореча получаем необходимый результат.

Далее необходимо вывести отдельно например первый элемент массива, для этого в шаблоне просто пишем:
PHP:
Имя: <?=$array[0]['name']?> Описание: <?=$array[0]['description']?>
Если массив окажется пустым мы ессно получим ошибку типа:
Notice: Undefined offset: 0 in <script> on line <string>

Каким образом будет правильнее выйти из этой ситуации, добавить в шаблон if(isset($array[0])) { ... действия ... } или есть более правильные решения?
 

Фанат

oncle terrible
Команда форума
наоборот.
ДОБАВЛЯТЬ пустой массив.
просто кое-кто путает слова "пустой" и "несуществующий".

и я не понял, почему задача названа новой.
поскольку она точно такая же, как и предыдущая.
и сводится к ИНИЦИАЛИЗАЦИИ ВСЕХ ДАННЫХ, которые используются в шпблоне.
 

Marquis

Новичок
ДОБАВЛЯТЬ пустой массив.
Теперь все встало на свои места.

просто кое-кто путает слова "пустой" и "несуществующий".
Ну почему же, я отлично знаю что такое пустой массив и что такое несущесвующий.

Единственное что меня смущало это добавление в массив "пустых" элементов, т.к. конструкция с if казалась более удобной и простой.
 

Фанат

oncle terrible
Команда форума
как так может быть, чтобы конструкция с if оказалась более удобной, чем ВООБЩЕ отсутствие какой либо конструкции - я не понимаю.
 
Сверху