варианты вывода...

Safary

Новичок
варианты вывода...

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

есть index.php, в нем прописано что если $mod=news то инклудируем news

в news.php код такой:

PHP:
если $id='' то $content='<? $query=mysql_query("SELECT id,author,title,text,views,date FROM news"); while($arr=mysql_fetch_array($query)) include("mods/news/list_tpl.php"); ?>'
include('tpl/site_tpl.php')
тоесть если ID новости не указан, то в переменную $content заносится ПХП-код, который будет выводить все новости подряд.
Потом инклудируется шаблон сайта, а в шаблоне сайта прописано просто
PHP:
<?=$content ?>
И получается что очень хорошо ПХП отделен от ХТМЛ и ХТМЛ всегда выводится после ПХП.

Сделал так для того, чтобы в шаблоне не писать цикл(который выше написан в переменной $content). А то шаблоны будут не то что с ПХП кодом, а с половиной кода.

Задумка очень хорошая и очень удобная, но она не работает к сожалению. :)
Вот хочу узнать кто как делает, да и вообще альтернативные варианты моей задумки есть ли?

-~{}~ 30.12.08 23:55:

как бы получается что переменные ПХП-код хранить, а потом выводить в нужном месте не могут?
 

x-yuri

Новичок
произошла типичная подмена понятий. Не надо пытаться отделить пхп-код, от html. Есть такая штука как логика представления - это то, каким образом на основании данных создается страничка. А вот чего не надо делать в html, так это работать с бд и т.д. Шаблон должен получать на входе данные, преобразовывать (если надо) и генерировать на основе данных html

-~{}~ 30.12.08 23:09:

один из вариантов. В сценарии извлекается из бд информация и помещается в массив. Этот массив передается в шаблон, а в шаблоне на основе этих данных создается html
Типа такого:
PHP:
...
$r = mysql_query('SELECT');
while( $rec = mysql_fetch_assoc($r) )
    $data[] = $rec;
...
PHP:
...
echo '<table>';
foreach( $data as $rec )
    echo '<tr><td>'.$rec['field1'].'</td>...</tr>';
echo '</table>';
...
 

Beavis

Banned
Re: варианты вывода...

Автор оригинала: Safary
Сделал так для того, чтобы в шаблоне не писать цикл(который выше написан в переменной $content). А то шаблоны будут не то что с ПХП кодом, а с половиной кода.
цикл в шаблоне это нормально
специально для шаблонов можно даже использовать старый синтаксис:
PHP:
<? foreach($data as $row): ?>
   <td><?=$row?></td>
<? endforeach; ?>
нормальная шаблонная конструкция))
 

x-yuri

Новичок
Сделал так для того, чтобы в шаблоне не писать цикл(который выше написан в переменной $content). А то шаблоны будут не то что с ПХП кодом, а с половиной кода.
в результате ты смешиваешь логику представления и доступ к бд, зачем тебе это нужно? хочешь сэкономить на количестве кода? имхо лучше знать, что логика представления у тебя только в шаблонах, а не вспоминать, где она еще может быть. В общем не зря придумали MVC
 

Safary

Новичок
x-yuri, спасибо, помог!
Просто шаблоны пытался сделать как можно проще, чтоб кроме конструкций типа <?=$content?> ниче не было, ну чтоб в дримвовере удобно редактировать было, ну лан...
у меня ещё идея появилась... если в ПХП создавать функцию, а в шаблоне просто писать - <? content(); ?> вроде тоже вариант.. или не?

Beavis, ну раз нормально - то так и буду делать, спасибо!
 

Духовность™

Продвинутый новичок
чтоб кроме конструкций типа <?=$content?> ниче не было
это не правильно

есть логика приложения - код программы - там мы делаем вычисления и генерируем все необходимые переменные
есть логика отображения - это шаблоны - они занимаются тем, что отображают значения твоих переменных в рамках html-разметки

в логике приложения _не должно быть html_
в логике отображения можно и _НУЖНО использовать стандартные конструкции управления PHP_

если в ПХП создавать функцию, а в шаблоне просто писать - <? content(); ?> вроде тоже вариант.. или не?
тогда это не шаблон у тебя будет, а профанация шаблона.

вот образец шаблона о котором я тебе говорю: http://phpclub.ru/paste/index.php?show=2251

если не обращать внимания на используемые в нем функции, то идея ясна - в шаблоне выводятся переменные. переменные "определяются" в PHP-программе, которая и подключает этот шаблон. Таким образом, я отделяю код ПРОГРАММЫ от кода ШАБЛОНА. Вот эти две сущности и нужно разделять. А ты пытаешься отделить PHP от HTML, что невозможно и является ошибочным заблуждением.

-~{}~ 31.12.08 22:33:

старый синтаксис
это не старый синтаксис. это упрощенный синтаксис.

-~{}~ 31.12.08 22:40:

...
echo '<table>';
foreach( $data as $rec )
echo '<tr><td>'.$rec['field1'].'</td>...</tr>';
echo '</table>';
...
это не шаблон, это говнокод
 

Safary

Новичок
Всё, теперь понял! Спасибо!
Только шаблон который ты дал не очень на шаблон похож :)
Но если это нормально и профи также делают то и я также буду. Ещё раз спасибо!
 

Фанат

oncle terrible
Команда форума
$content='<? $query=mysql_query
это чудовищно.
я не представляю, как вообще рука повернулась такое написать.
есть index.php, в нем прописано что если $mod=news то инклудируем news
опять возникает вопрос. нафига нам этот индекс.
если вывод мы делаем весь в шаблоне, и, следовательно, становится самая идиотская, и самая любимая ламерами всех стран идея "напишем в индексе <html></html>"

-~{}~ 01.01.09 22:09:

triumvirat, это не шаблон. это говнокод

-~{}~ 01.01.09 22:17:

Safary
а в шаблоне просто писать - <? content(); ?> вроде тоже вариант.. или не?
чтобы ответить себе на этот вопрос, ты должен сначала ответить на другой. Зачем тебе нужны шаблоны вообще.
 

Safary

Новичок
*****, я в индекс <html></html> не собирался даже писать )
а к чему ты это, вроде у меня с индексом всё нормально теперь, индекс только инклудирует какой-нибудь мод и всё. А мод уже инклудирует шаблон... всё правильно же..
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Где ты ее увидел?
в php|architect в первый раз. В книге Zend Certification Study Guide, second edition, страница 4:
Short tags, script tags and ASP tags are all considered deprecated and their use is
strongly discouraged.
Если ты не заметил, они с некотрого времени по умолчанию стали отключены, обсуждение по отказу от них — я дал ссылку, да, стоит в active rfc давно.
 

Фанат

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

Safary

Новичок
Ф анат, на что ты намекаешь? :)

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

Хотя нет, я знаю для чего индекс инклудирует... для того чтобы из корневой дирректории обращаться ко всему...

к примеру из индекса обращаться к mysql.php можно так:
/scripts/mysql.php

а из мода, который лежит в mods/news/index.php придется так:
.../scripts/mysql.php

Ну хотя да, я че-то не догоняю... Как по-другому сделать преложишь?
 

x-yuri

Новичок
по-другому можно создать для каждой странички свой скрипт. Я вижу пока одну причину использовать единственный index.php: если ты хочешь ЧПУ и не хочешь реализовывать его средствами apache (что пожалуй имеет смысл)
 

Фанат

oncle terrible
Команда форума
Да ни на что я не намекаю. я не понимаю, зачем тебе делать в два действия то, что можно делать в одно.
зачем писать в адресе indes.php?mod=news, и потом его инклудить, вместо того, чтобы просто написать news.php
Я просто не понимаю, зачем делать сложно, если можно делать просто.
Если у тебя есть причина - делай. Но я просто не вижу причины. И поэтому спрашиваю. У тебя.
 

Safary

Новичок
*****, ну я то не особо опытный, поэтому как вы подсказываете так и буду делать. Ну да, твой вариант удобнее, буду его использовать. :)

x-yuri, в индексе у меня вот так:
PHP:
if($mod!=='"') {
switch($mod){
case 'download': include('mods/download/index.php');
// и т.д.
}
}
Вариант фаната лучше, действительно нафиг через индекс инклудировать, если напрямую можно..Хотя я буду ЧПУ использовать mod_rewirite, поэтому всетаки с индексом...
 

x-yuri

Новичок
если ты хочешь ЧПУ и не хочешь реализовывать его средствами apache (что пожалуй имеет смысл)
можно сделать ЧПУ средствами apache и тебе попрежнему не понадобится index.php

-~{}~ 02.01.09 18:15:

но читабельнее будет скорее всего какой-нибудь php-router/mapper
 

Safary

Новичок
но всёравно mod_rewrite буду делать, темболее считается лучшим методом, поисковики нормально относятся, да и разобрался я в нем уже немного )

так а если индекс-пхп не нужен че с ним вообще делать-то? :)
может на помоййку выбросить? )))
 
Сверху