Php скрипт генерации страницы

Генерация html на PHP

Предлагаю вашему вниманию свое решение по генерации html на PHP. Задача вроде бы тривиальная, но хотелось бы, чтобы это было расширяемо, кратко, но в тоже время с хорошим функционалом. Получилось вроде не плохо.

Сразу скажу( как многие считают в комментариях), что задача ставилось не написать шаблонизатор (которых и так много) и не заменить шаблонизатор JavaScript. Я прекрасно знаю, что true way это разделять html и данные. Но мне понадобилось писать html в классах, для создания компонентов фреймворка, на подобие CGridView в yii, стоит ли в таких местах выносить html в отдельные файлы решать вам.

Основная цель, избавится от html в классах и функциях.

Простой пример, обычная кнопка:

CHtml::create() ->p() ->a(array('href' => 'http://habrahabr.ru', 'class' => 'btn')) ->text('Перейти') ->render(); 

Ничего хитрого, можно было бы этим и ограничется, но захотелось циклы:

 $arr = array('1' => 'Первый', '2' => 'Второй'); CHtml::create() ->select($options) ->each(CHtml::plainArray($arr, 'value', 'text')) ->option('array("value" => $data->value)') ->text('$data->text') ->end() ->endEach() 
$arr = array( array('value' => '1', 'text' =>'Первый'), array('value' => '2', 'text' => 'Второй') ); 

Теги внутри цикла могут содержать функции или строки с eval выражениями, вложенность любая, пример с таблицей:

$columns = array( array('id' => 'NAME', 'label' => 'Имя'), array('id' => 'AGE', 'label' => 'Возраст') ); $data = array( array('NAME' => 'Петр', 'AGE' => 29), array('NAME' => 'Василий', 'AGE' => 32) ); CHtml::create() ->table() ->thead() ->tr() ->each($columns) ->th() ->text(function($column)< return $column['label']; >) ->end() ->endEach() ->end() ->end() ->tbody() ->each($data) ->tr() ->each($columns) ->td() ->text(function($row, $column) < return $row[$column['id']]; >) ->end() ->endEach() ->end() ->endEach() ->render(); 

Незакрытые теги закрываются автоматически.

Класс можно расширить, вплоть до использования в формах. Расширить можно за счет наследования или внедрения зависимости, за то, как будет выводится каждый тег и его атрибуты используется одна функция, поэтому можно легко переопределить это поведение.

 class CMyHtml extends CHtml < public function a($options = array()) < $default = array( 'href' =>'javascript:void(0)' ); return parent::a(array_replace($default, $options)); > > 
class CForm < private $_lastLabel = ''; public function __construct(CModel $model, CHtml $html = null) < $this->_model = $model; $this->_html = $html ?: CHtml::create(); > public function __call($method, $ps) < $options = $ps ? $ps[0]: array(); if ($method === 'label') < $this->_lastLabel = isset($options['for']) ? $this->_model->getLabel($options['for']) : ''; > if ($method === 'text' && $this->_lastLabel) < $options = $options ?: $this->_lastLabel; $this->_lastLabel = ''; > $this->_html->$method($options); return $this; > > 

Само решение можно посмотреть и попробовать на github.

Источник

Автоматическое создание веб-страниц с помощью PHP

Если вы подпишитесь на услугу по ссылке на этой странице, Reeves and Sons Limited может получить комиссию. Смотрите наши заявление об этике.

Читайте также:  Mr. Camel

В жизни бывают определенные моменты, когда вам нужна веб-страница, чтобы делать что-то большее, чем просто сидеть на ней, будучи веб-страницей. Он нужен вам, чтобы заработать себе на жизнь. Один из способов сделать это — заставить его работать на вас, чтобы вам не пришлось вручную кодировать каждое обновление или мод страницы. Самый простой способ научиться делать что-то подобное — это сделать это на самом деле, поэтому в оставшейся части этой статьи я покажу вам один из способов реализации системы, которая будет создавать для вас новые веб-страницы одним касанием кнопка. В этом сценарии мы предполагаем, что ваш клиент — ресторан, который хочет предлагать ваучеры на разные особые случаи в течение года. Но, конечно, они не хотят платить вам за обновление для них, поэтому вам лучше убедиться, что вы выставили им достаточный счет за эту систему автоматизации, которая будет делать обновления для них.

1. Сначала нам нужно создать базовый шаблон веб-страницы.

Screen Shot на 2016 05-30-1.56.52 А.М.

Это просто стандартный каркас веб-страницы. Вы можете дать ему имя, например, pageBuilder.php или что-нибудь в этом роде. Для этого не обязательно использовать PHP. Вы можете использовать другой язык программирования, но в этом примере мы сделаем все просто и сделаем все на PHP.

2. Добавить Bootstrap

Screen Shot на 2016 05-30-1.56.56 А.М.

3. Настроить контейнер

Screen Shot на 2016 05-30-1.56.48 А.М.

Чтобы все было аккуратно и аккуратно, мы должны определить контейнер, в котором мы будем хранить содержимое страницы.

4. Создание веб-формы

Определите веб-форму, и мы также добавим причудливое название в форму, которая является необязательной, но хорошей идеей.

Screen Shot на 2016 05-30-1.56.43 А.М.

5. Добавить поля формы

  • Фоновое изображение для страницы
  • Название праздника
  • Headline
  • Вступительная речь
  • Некоторая банальная цитата или дополнительная инструкция
  • Атрибуция для банальной цитаты
  • Стиль шрифта, используемый для каждого из четырех текстовых элементов обрамления (вdiviдважды).
  • Диапазон дат, согласно которому ваучеры действительны для
  • Предложите 1 и предложите 2, которые будут рекламироваться на ваучеры.
  • Дополнительные сообщения ваучера (например, условия)
  • Данные для ваучерных QR-кодов, которые будут сгенерированы

Screen Shot на 2016 05-30-1.56.00 А.М.

Screen Shot на 2016 05-30-1.55.54 А.М.

Screen Shot на 2016 05-30-1.55.36 А.М.

И после всех этих усилий мы получим страницу, которая выглядит примерно так:

Screen Shot на 2016 05-30-1.55.22 А.М.

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

6. Создайте файл процессора формы

После создания формы вам понадобится программное обеспечение, которое будет обрабатывать отправленные данные и что-то с ними делать. В этом случае мы будем использовать отправленные данные для создания нового HTML стр.

Теперь имейте в виду, что это не то же самое, что обычный ответ PHP, где данные используются в реальном времени и динамически отражаются для пользователя. Вместо этого мы создаем статическую страницу, которая будет существовать постоянно, пока мы ее не перезапишем.

Файл должен быть назван так же, как и действие значение атрибута в объявлении формы, поэтому в нашем примере это будет voucherGen.php, и поскольку мы не указали путь, его нужно будет сохранить в том же месте, что и pageBuilder.php для его работы.

7. Инициализировать переменные

Данные, представленные из pageBuilder.php был возвращен как ассоциативный массив, называемый $ _POST, и все значения данных в массиве могут быть доступны через их управление формой HTML имя атрибуты. Поэтому инициализировать наши переменные на самом деле довольно просто. Это также необязательно, но это просто делает код более аккуратным и более легким для чтения. Вы, безусловно, можете работать напрямую с $ _POST если вы предпочитаете.

Читайте также:  Modx php session configuration

Screen Shot на 2016 05-30-1.55.15 А.М.

8. Используйте условные выражения, чтобы установить правильные значения шрифтов.

Сделав это раньше, вы сэкономите время и сэкономите проблемы позже. Мы просто проверяем, какие значения были выбраны, а затем заменяем их фактическими названиями шрифтов.

Screen Shot на 2016 05-30-1.55.10 А.М.9. Начните строить генераторную строку

На самом деле все, что нам нужно здесь сделать, это создать одну действительно длинную строку, которая будет содержать все необходимое для создания новой страницы. Мы будем использовать конкатенацию строк, чтобы сделать ее удобочитаемой и упростить просмотр, куда были вставлены значения данных. Это начинается с настройки базовой HTML-страницы:

Screen Shot на 2016 05-30-1.55.06 А.М.

Вы, наверное, видите, к чему мы идем. Обратите внимание на точку с запятой в конце. Это важно. Также любые точки с запятой, встречающиеся в тексте (как часть объявления CSS или клиентского скрипта), должны быть заключены в кавычки.

10. Начать добавление тела страницы в строку генератора

Есть более эффективные способы построения этой строки, но мне нравится делать код аккуратным, чтобы его было легко читать. Для этого вы можете использовать сокращенные методы, и вам также не нужно делать это как отдельный процесс для шага 9. Я чувствую, что легче понять, когда различные разделы страницы разделены таким образом.

Screen Shot на 2016 05-30-1.55.00 А.М.

11. Напишите строку генератора в HTML

В этом случае мы жестко кодируем имя файла, но вы можете (и, вероятно, должны) сделать это поле в своей форме pageBuilder.

Screen Shot на 2016 05-30-1.54.55 А.М.

12. Добавить тестовую ссылку

Когда вы нажимаете кнопку BUILD IT, потому что она не перенаправляется на веб-страницу, как в обычной программе PHP, вам нужно добавить ссылку или что-то в этом роде и посмотреть, что получилось.

Screen Shot на 2016 05-30-1.54.50 А.М.

13. Создание пользовательского файла CSS

Вы можете сохранить дополнительные инструкции по стилю в этом файле, но на данный момент единственной важной является инструкция по стилю для основной див.

Screen Shot на 2016 05-30-1.54.45 А.М.

14. Создание и загрузка wrap.png

Чтобы это работало правильно, вам нужно создать одно полупрозрачное изображение в пикселях и назовите его wrap.png затем загрузите его по пути, указанному в custom.css .

15. Загрузите подходящие фоновые изображения и проверьте свой pageBuilder

Вы будете в восторге, узнав, что мы почти закончили, и теперь это просто вопрос тестирования и исправления любых возникающих ошибок. Выберите несколько красивых простых изображений, которые не слишком загружены и подходят для особых событий или случаев (в нашем примере это День матери и День отца). Загрузите изображения в папку, в которой вы храните изображения для своего веб-сайта. Затем заполните форму, нажмите кнопку и посмотрите, что произойдет. Вот пример формы со всеми заполненными полями данных.

Picture1

Это должно привести к созданию чего-то совершенно подобного:

Screen Shot на 2016 05-30-1.54.11 А.М.

Мы уже догадались, что вы не захотите вводить все с нуля, поэтому вы можете загрузить исходный код для pageBuilder.php и voucherGen.php в этом архива.

Вы можете применить эту технику создания файлов HTML в виде строк, а затем записать их в файлы во всех ситуациях. Только будьте осторожны, никогда не помещайте что-то подобное в рекурсивный цикл, иначе вы заполните свой жесткий диск и выйдет из строя сервер.

Источник

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Читайте также:  Javascript math random seeding

Php class to generate html code

License

Airmanbzh/php-html-generator

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Create HTML tags and render them efficiently.

return HtmlTag::createElement(); // returns an empty HtmlTag Container
return HtmlTag::createElement('a'); // returns an HtmlTag containing a 'a' tag
  • it always generates valid HTML and XHTML code
  • it makes templates cleaner
  • it’s easy to use and fast to execute
echo(HtmlTag::createElement('a'));
$tag = HtmlTag::createElement('a') echo( $tag );
echo HtmlTag::createElement('div');
echo(HtmlTag::createElement('p')->text('some content'));
echo(HtmlTag::createElement('div')->addElement('a')->text('a text'));
$container = HtmlTag::createElement('div'); $container->addElement('p')->text('a text'); $container->addElement('a')->text('a link');

Classics attributes (method : ‘set’)

$tag = HtmlTag::createElement('a') ->set('href','./sample.php') ->set('id','myID') ->text('my link'); echo( $tag );
a href='./sample.php' id='myID'>my linka>

Shortcut to set an ID attribute (method : ‘id’)

$tag = HtmlTag::createElement('div') ->id('myID'); echo( $tag );

Class management (method : ‘addClass’/’removeClass’)

$tag = HtmlTag::createElement('div') ->addClass('oneClass') ->text('my content') echo( $tag );
div class pl-s">oneClass">my contentdiv>
$tag = HtmlTag::createElement('div') ->addClass('aClass') ->addClass('anothereClass') ->text('my content') echo( $tag );
div class pl-s">aClass anothereClass">my contentdiv>
$tag = HtmlTag::createElement('div') ->addClass('firstClass') ->addClass('secondClass') ->text('my content') ->removeClass('firstClass'); echo( $tag );
div class pl-s">secondClass">my contentdiv>

Text and content are generated according to the order of addition

$tag = HtmlTag::createElement('p') ->text('a text') ->addElement('a') ->text('a link');

To generate content before text, 2 solutions :

$tag = HtmlTag::createElement('p') ->addElement('a') ->text('a link') ->getParent() ->text('a text');
$tag = HtmlTag::createElement('p'); $tag->addElement('a')->text('a link'); $tag->text('a text');

Источник

Оцените статью