Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
43 / 17 / 4
Регистрация: 22.02.2012
Сообщений: 327

Через подшаблон или через регулярное выражение?

11.07.2013, 20:29. Показов 1648. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Задача такая, вывести простую таблицу через шаблон.
Проблема в том что кол-во строк таблице неизвестно.
Как это лучше сделать?

1. Через шаблон и подшаблон.
Шаблон структуры таблицы.
HTML5
1
2
3
4
5
6
7
8
<table class='messages'>
    <tr>
        <th>От кого</th>
        <th>Тема</th>
        <th>Дата</th>
    </tr>
    {subtemplate}
</table>
Подшаблон строки.
HTML5
1
2
3
4
5
<tr>
        <td>{sender}</td>
        <td>{theme}</td>
        <td>{time}</td>
    </tr>
План такой:
Читаем подшаблон.
Необходимое кол-во раз заменяем метки.
Склеиваем это в одну строку.
Читаем шаблон таблицы.
Заменяем в нем единственную метку на ранее полученную строку.

2.Через регулярное выражение.
Шаблон один.
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
<table class='messages'>
    <tr>
        <th>От кого</th>
        <th>Тема</th>
        <th>Дата</th>
    </tr>
    {@<tr>
        <td>{sender}</td>
        <td>{theme}</td>
        <td>{time}</td>
    </tr>@}
</table>
План:
Читаем весь шаблон.
Регулярным выражением получаем то что между "{@" и "@}".
С этой работаем как с подшаблоном. (создаем строку с содержимым таблицы).
Заменяем то что между "{@" и "@}" на содержимое таблицы.
Удаляем "{@" и "@}".


Понимаю что варианты возможно странные.
Но все же интересует, как бы такую задачу решил профессионал.
(Сам такое делаю впервые.)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.07.2013, 20:29
Ответы с готовыми решениями:

Регулярное выражение в JS, пропущеное через htmlspecialchars - PHP
Имеется такой код: 'editable' =&gt; array( 'attribute' =&gt; 'price', 'onSave' =&gt; 'js: function(e, params) { var str =...

Ввод даты через регулярное выражение
В общем, такой вопрос. Есть на форме поле &quot;дата&quot;. Туда вводится дата по заданному шаблону дд.мм.гггг. Вот код: var regTestDate =...

Поиск тегов через регулярное выражение
Подскажите пожалуйста, как с помощью регулярного выражения найти: &lt;span id='e145'&gt;привет&lt;/span&gt; и ей подобные строки. P.S....

12
 Аватар для Devochka
31 / 19 / 3
Регистрация: 07.10.2011
Сообщений: 98
11.07.2013, 23:46
Не знаю, как профессионалы решат этот вопрос. Но должно быть нечто, что будет получать данные, которые потом занесутся в строки. Почему бы не использовать это нечто для формирования таблицы?
0
43 / 17 / 4
Регистрация: 22.02.2012
Сообщений: 327
11.07.2013, 23:58  [ТС]
Всмысле выводить строки циклом используя echo '<td>..</td>'?
Нет, мне такое не подходит.
Говорят, нынче не модно выводить HTML через PHP. Нужно использовать шаблоны.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
12.07.2013, 00:06
эмм.. Ну либо подшаблон, если хотите выделить (хотя 2-3 строчки я бы не стал выделять в отдельный файл),
либо писать тут же.. А что мешает выводить здесь же, без использования лишних замен в шаблонах?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<table class='messages'>
    <tr>
        <th>От кого</th>
        <th>Тема</th>
        <th>Дата</th>
    </tr>
    <?php while(.....) : ?>
        <tr>
            <td><?php echo $sender; ?></td>
            <td><?php echo $theme; ?></td>
            <td><?php echo $time; ?></td>
        </tr>
    <?php endwhile; ?>
</table>
Зачем вообще использование подобного шаблонизатора, ведь тогда же для замены придется загонять все в кавычки и т.п. Пых и сам неплохой шаблонизатор, можно использовать обычные include/require для вывода, к примеру..

Не по теме:

Цитата Сообщение от Devochka Посмотреть сообщение
Не знаю, как профессионалы решат этот вопрос
тоже интересно.. :)



Добавлено через 3 минуты
Цитата Сообщение от Gabriel.exe Посмотреть сообщение
Говорят, нынче не модно выводить HTML через PHP
оно всегда было "не модно". Только "вывод HTML через PHP" немного путанно, скорее, надо так: "вывод HTML посредством использования операторов вывода PHP".

Добавлено через 2 минуты
а вот так уже не рекомендуется делать, как раз
PHP
1
2
3
4
5
6
7
<?php while(.....) {
        echo '<tr>
            <td>', $sender, '</td>
            <td>', $theme, '</td>
            <td>', $time, '</td>
        </tr>';
}
0
12.07.2013, 16:11

Не по теме:

Gabriel.exe, А потом Вам обязательно потребуются вложенные конструкции: {@ ... {@ ... @} ... {@ ... @} ... @} . Рассчитывайте сразу и на это.

0
43 / 17 / 4
Регистрация: 22.02.2012
Сообщений: 327
12.07.2013, 21:58  [ТС]
Ну да с регулярными выражениями это конечно не айс метод.

Добавлено через 4 минуты
Цитата Сообщение от KOPOJI Посмотреть сообщение
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<table class='messages'>
    <tr>
        <th>От кого</th>
        <th>Тема</th>
        <th>Дата</th>
    </tr>
<?php while(.....) : ?>
    <tr>
        <td><?php echo $sender; ?></td>
        <td><?php echo $theme; ?></td>
        <td><?php echo $time; ?></td>
    </tr>
<?php endwhile; ?>
</table>
А не нарушает ли это правило отделения логики от оформления?
Ведь при таком способе верстальщик не сможет увидеть что именно будет выводиться. Он ведь кажеться первый начинает работать. Следовательно никакого массива у него пока нет.
(Или лично для себя он сначала напишет просто("холостые") теги, применит к ним стили, посмотрит чтобы это правильно выглядело, и только потом внесет в шаблон начинку с конструкциями?.
А вообще условия и циклы в таком шаблоне этот работа верстальщика или программиста?)
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
12.07.2013, 23:05
Цитата Сообщение от Gabriel.exe Посмотреть сообщение
Ведь при таком способе верстальщик не сможет увидеть что именно будет выводиться
а сильно много изменится, если там будет не
PHP
1
<?php echo $varName; ?>
а
Code
1
{{ varName }}
?

Добавлено через 1 минуту
Цитата Сообщение от Gabriel.exe Посмотреть сообщение
не нарушает ли это правило отделения логики от оформления?
а где здесь логика? Т.е., вы хотите сказать, что в шаблонах уже нельзя использовать циклы - это является логикой?

Добавлено через 7 минут
и вообще, "нельзя" - понятие растяжимое. Закрывающий тег ?>
0
30 / 30 / 7
Регистрация: 09.07.2013
Сообщений: 120
12.07.2013, 23:44
Существуют и логика шаблона и логика кода.

Можно воспользоваться Smarty.

PHP
1
2
3
4
5
$messages= mysql_query("SELECT * FROM table); 
while  ($message= mysql_fetch_assoc($messages)){
  $messagesarray[] = $message;
}
$smarty->assign('messages',$messagesarray);
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<table class='messages'>
    <tr>
        <th>От кого</th>
        <th>Тема</th>
        <th>Дата</th>
    </tr>
{foreach from=$messages item=itemmessage}
<tr>
        <td>{$itemmessage.sender}</td>
        <td>{$itemmessage.theme}</td>
        <td>{$itemmessage.time}</td>
    </tr>
{/foreach}
</table>
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
13.07.2013, 00:10
Bobinho, вот вы заюзали код смарти. Итак, смотрим плюсы.
1. Использование шаблонизатора смарти (Ура!!!)
Я больше не вижу плюсов. По синтаксису мне больше нравится твиг. Да и по скорости вроде тоже побыстрее. По данному использованию смарти мне не нравится
Минусы:
1. Лишний цикл http://www.smarty.net/docs/en/... .while.tpl
2. Накапливаем вывод в переменную
3. Тоже самое "не пойми что" для верстальщика, в принципе.

Далее, вспоминаем про открытые теги, которые по умолчанию открыты, и видим, практически, "урезанный твиг". Ну разве что без всяких вкусностей а-ля |escape и т.п.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<table class='messages'>
    <tr>
        <th>От кого</th>
        <th>Тема</th>
        <th>Дата</th>
    </tr>
    <?php while(.....) : ?>
        <tr>
            <td><?=$sender ?></td>
            <td><?=$theme ?></td>
            <td><?=$time ?></td>
        </tr>
    <?php endwhile; ?>
</table>
а если подключить asp-теги, так вообще красота. Не нравится такой вариант, хотите шаблоны? Пожалуйста: напишите одну функцию для подключения шаблона, и все Шаблонная система через file
Но я, хоть убей, не вижу ни одного плюса (ну разве что кроме "не php-файл") в использовании смарти таким образом.
Вот, сравните с таким кодом:
PHP
1
2
3
4
5
$messages= mysql_query("SELECT * FROM table"); 
while  ($message= mysql_fetch_assoc($messages)){
  $messagesarray[] = $message;
}
renderTemplate( 'файл_шаблона', array('messages'=>$messagesarray) );
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<table class='messages'>
    <tr>
        <th>От кого</th>
        <th>Тема</th>
        <th>Дата</th>
    </tr>
<? foreach ($messages as $itemmessage) : ?>
<tr>
        <td><?=$itemmessage['sender']?></td>
        <td><?=$itemmessage['theme']?></td>
        <td><?=$itemmessage['time']?></td>
    </tr>
<? endforeach ?>
</table>
Скажите, в чем профит от смарти здесь? Или это просто то, что вы начитались, и решили, что без шаблонизатора нельзя ничего сделать? Так сначала надо подумать, а нужен ли вам шаблонизатор, не придется ли вам строить подобные циклы и загонять вывод в переменную? И не тоже самое ли получится в итоге, от чего вы пытались уйти?

Добавлено через 4 минуты

Не по теме:

в общем, думаю, я уже достаточно сказал о своей точке зрения (я не против шаблонизаторов, я против их нерационального использования). Так что делайте что хотите, считайте логикой for, foreach, echo, print, что угодно.. :) Удачи :)

0
13.07.2013, 01:15

Не по теме:

Цитата Сообщение от Gabriel.exe Посмотреть сообщение
Говорят, нынче не модно выводить HTML через PHP
:D формулировка забавная

0
30 / 30 / 7
Регистрация: 09.07.2013
Сообщений: 120
13.07.2013, 09:03
Цитата Сообщение от KOPOJI Посмотреть сообщение
Bobinho, вот вы заюзали код смарти. Итак, смотрим плюсы.
1. Использование шаблонизатора смарти (Ура!!!)
Я больше не вижу плюсов. По синтаксису мне больше нравится твиг. Да и по скорости вроде тоже побыстрее. По данному использованию смарти мне не нравится
Минусы:
1. Лишний цикл http://www.smarty.net/docs/en/... .while.tpl
2. Накапливаем вывод в переменную
3. Тоже самое "не пойми что" для верстальщика, в принципе.

Далее, вспоминаем про открытые теги, которые по умолчанию открыты, и видим, практически, "урезанный твиг". Ну разве что без всяких вкусностей а-ля |escape и т.п.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<table class='messages'>
    <tr>
        <th>От кого</th>
        <th>Тема</th>
        <th>Дата</th>
    </tr>
    <?php while(.....) : ?>
        <tr>
            <td><?=$sender ?></td>
            <td><?=$theme ?></td>
            <td><?=$time ?></td>
        </tr>
    <?php endwhile; ?>
</table>
а если подключить asp-теги, так вообще красота. Не нравится такой вариант, хотите шаблоны? Пожалуйста: напишите одну функцию для подключения шаблона, и все Шаблонная система через file
Но я, хоть убей, не вижу ни одного плюса (ну разве что кроме "не php-файл") в использовании смарти таким образом.
Вот, сравните с таким кодом:
PHP
1
2
3
4
5
$messages= mysql_query("SELECT * FROM table"); 
while  ($message= mysql_fetch_assoc($messages)){
  $messagesarray[] = $message;
}
renderTemplate( 'файл_шаблона', array('messages'=>$messagesarray) );
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<table class='messages'>
    <tr>
        <th>От кого</th>
        <th>Тема</th>
        <th>Дата</th>
    </tr>
<? foreach ($messages as $itemmessage) : ?>
<tr>
        <td><?=$itemmessage['sender']?></td>
        <td><?=$itemmessage['theme']?></td>
        <td><?=$itemmessage['time']?></td>
    </tr>
<? endforeach ?>
</table>
Скажите, в чем профит от смарти здесь? Или это просто то, что вы начитались, и решили, что без шаблонизатора нельзя ничего сделать? Так сначала надо подумать, а нужен ли вам шаблонизатор, не придется ли вам строить подобные циклы и загонять вывод в переменную? И не тоже самое ли получится в итоге, от чего вы пытались уйти?

Добавлено через 4 минуты

Не по теме:

в общем, думаю, я уже достаточно сказал о своей точке зрения (я не против шаблонизаторов, я против их нерационального использования). Так что делайте что хотите, считайте логикой for, foreach, echo, print, что угодно.. :) Удачи :)

Просто ТС вроде хочет сделать по-модной нынче MVC , отделить код от html, вот я предложил использовать смарти.
Естественно, сколько людей, столько и мнений. Я просто предложил альтернативу и не пытаюсь навязать своё мнение.

Это для верстальщика лучше?

PHP
1
2
3
4
5
6
7
<?php while(.....) : ?>
        <tr>
            <td><?=$sender ?></td>
            <td><?=$theme ?></td>
            <td><?=$time ?></td>
        </tr>
    <?php endwhile; ?>
Чем вот это?
PHP
1
2
3
4
5
6
7
{foreach from=$messages item=itemmessage}
<tr>
        <td>{$itemmessage.sender}</td>
        <td>{$itemmessage.theme}</td>
        <td>{$itemmessage.time}</td>
    </tr>
{/foreach}
0
 Аватар для fa2m
356 / 280 / 22
Регистрация: 27.08.2012
Сообщений: 855
13.07.2013, 13:21

Не по теме:

Цитата Сообщение от Bobinho Посмотреть сообщение
Чем вот это?
Те же яйца, только сбоку... (с)


Если собираетесь использовать Smarty только для того, чтобы было удобно верстальщику, то использовать его не нужно. Если писать всё "верно", то и на голом html c вкраплениями php нормальному верстальщику будет всё понятно, а малоквалифицированный и Smarty не поймёт.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
13.07.2013, 23:15
Цитата Сообщение от Bobinho Посмотреть сообщение
Это для верстальщика лучше?
да ему по-барабану будет практически. Почему вы сравниваете разные коды? Сравнивайте тогда эквивалентные
PHP
1
2
3
4
5
6
7
<? foreach ($messages as $itemmessage) : ?>
<tr>
        <td><?=$itemmessage['sender']?></td>
        <td><?=$itemmessage['theme']?></td>
        <td><?=$itemmessage['time']?></td>
    </tr>
<? endforeach ?>
vs
PHP
1
2
3
4
5
6
7
{foreach from=$messages item=itemmessage}
<tr>
        <td>{$itemmessage.sender}</td>
        <td>{$itemmessage.theme}</td>
        <td>{$itemmessage.time}</td>
    </tr>
{/foreach}
Настолько большая разница? Вы действительно считаете, что, если второй код будет верстальщику понятным, то первый - нет?

Добавлено через 4 минуты
Цитата Сообщение от Bobinho Посмотреть сообщение
по-модной нынче MVC
а MVC - без шаблонизатора не реализуется?
Цитата Сообщение от Bobinho Посмотреть сообщение
отделить код от html
отделить код от html != MVC. Можно спокойно вообще без использования ООП написать проект, где будет разделение html и php. Простой пример - "самопальная" функция по ссылке выше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.07.2013, 23:15
Помогаю со студенческими работами здесь

Добавление пустой строки через регулярное выражение
Допустим есть строки if (dog&gt;cat){ dog.eat(cat); } Нужно через регулярное выражение поставить пустую строку...

Как через регулярное выражение узнать, присутствует ли в строке слеш?
Как через регулярное выражение можно было бы узнать присутствует ли в строке слеш &quot;/&quot; или нет...? Я так понимаю , нужно...

Возможно ли найти расположение подстроки в строке через регулярное выражение std::regex?
Слышал, что C# позволяет с помощью regex определять начало найденной подстроки и её длину. Возможно ли это сделать на C++? Например,...

Регулярное выражение для получения чисел из строки, где эти два числа записаны через слеш
Ввожу строку &quot;1/3&quot;, а оттуда хочу достать только 1 и 3. Помогите составить регулярное выражение

Регулярное выражение - после согласной или гласной должна идти гласная или согласная
Возможно ли это решить с помощью регулярных выражений, если да то как?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru