Создание html страниц с помощью PHP. HTML, CSS, PHP, JavaScript, SQL – что и зачем


Вы узнаете, как получить список всех статей, опубликованных на сайте.

Шаг 1. Подготовка

В первую очередь нужно скопировать библиотеку simpleHTMLdom , которая доступна на сайте

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

Шаг 2. Основы парсинга

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

$html = new simple_html_dom();
// Загрузка из строки
$html->load("

Hello World!

");
// Загрузка файла
$html->load_file("http://net.tutsplus.com/");

Вы можете создать исходный объект загрузив HTML либо из строки, либо из файла. Загрузка из файла может быть выполнена либо через указание URL , либо из вашей локальной файловой системы.

Примечания: Метод load_file() делегирует работу функции PHP file_get_contents . Если allow_url_fopen не установлен в значение true в вашем файле php.ini , то может отсутствовать возможность открывать удаленные файлы таким образом. В этом случае вы можете вернуться к использованию библиотеки CURL для загрузки удаленных страниц, а затем прочитать с помощью метода load() .

Доступ к информации

Как только у вас будет объект DOM, вы сможете начать работать с ним, используя метод find() и создавая коллекции. Коллекция - это группа объектов, найденных по селектору. Синтаксис очень похож на jQuery.



Hello World!


We"re Here.




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

1. # создаем и загружаем HTML
2. include("simple_html_dom.php");
3. $html = new simple_html_dom();
4. $html->load(“

Hello World!

“);
5. # получаем элемент представляющий второй параграф
6. $element = $html->find(“p“);
7. # модифицируем его
8. $element->innertext .= “ and we"re here to stay.“;
9. # Выводим!
10. echo $html->save();

Строки 2-4 : Загружаем HTML из строки, как объяснялось выше.

Строка 6 : Находим все тэги

В HTML, и возвращаем их в массив. Первый параграф будет иметь индекс 0, а последующие параграфы индексируются соответственно.

Строка 8 : Получаем доступ ко второму элементу в нашей коллекции параграфов (индекс 1), добавляем текст к его атрибуту innertext. Атрибут innertext представляет содержимое между тэгами, а атрибут outertext представляет содержимое включая тэги. Мы можем заменить тэг полностью, используя атрибут outertext.

Теперь добавим одну строку и модифицируем класс тэга нашего второго параграфа.

$element->class = "class_name";
echo $html->save();

Окончательный вид HTML после команды save будет иметь вид:



Hello World!


We"re here and we"re here to stay.



Другие селекторы

Несколько других примеров селекторов. Если вы использовали jQuery, все покажется вам знакомым.

# получаем первый найденный элемент с id=“foo“
$single = $html->find("#foo", 0);
# получаем все элементы с классом “foo“
$collection = $html->find(".foo");
# получаем все теги ссылок на странице
$collection = $html->find("a");
# получаем все теги ссылок, которые расположены внутри тега H1
$collection = $html->find("h1 a");
# получаем все теги img с title="himom"
$collection = $html->find("img");

Первый пример требует пояснений. Все запросы по умолчанию возвращают коллекции, даже запрос с ID, который должен вернуть только один элемент. Однако, задавая второй параметр, мы говорим “вернуть только первый элемент из коллекции”.

Это означает, что $single - единичный элемент, а не не массив элементов с одним членом.

Остальные примеры достаточно очевидны.

Документация

Полная документация по библиотеке доступна на .

Шаг 3. Пример из реального мира

Для демонстрации библиотеки в действии мы напишем скрипт для скрепинга содержимого сайта net.tutsplus.com и формирования списка заголовков и описания статей, представленных на сайте….только в качестве примера. Скрепинг относится к области трюков в веб, и не должен использоваться без разрешения владельца ресурса.

Include("simple_html_dom.php");
$articles = array();
getArticles("http://net.tutsplus.com/page/76/");

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

Так же объявим глобальный массив, чтобы сделать проще сбор все информации о статьях в одном месте. Прежде чем начинать парсинг взглянем, как описывается статья на сайте Nettuts+.



...


Title




Description



Так представлен основой формат поста на сайте, включая комментарии исходного кода. Почему важны комментарии? Они подсчитываются парсером как узлы.

Шаг 4. Начало функции парсинга

function getArticles($page) {
global $articles;
$html = new simple_html_dom();
$html->load_file($page);
// ... Дальше...
}

Начинаем с объявления глобального массива, создаем новый объект simple_html_dom , и затем загружаем страницу для парсинга. Данная функция будет рекурсивно вызываться, поэтому устанавливаем для нее в качестве параметра URL страницы.

Шаг 5. Находим ту информацию, которая нам нужна

1. $items = $html->find("div");
2. foreach($items as $post) {
3. # помним про учет комментариев в качестве узлов
4. $articles = array($post->children(3)->outertext,
5. $post->children(6)->first_child()->outertext);
6. }

Это суть функции getArticles . Нужно разобраться более детально, чтобы понять, что происходит.

Строка 1 : Создаем массив элементов - тег div с классом preview. Теперь у нас есть коллекция статей, сохраненная в $items .

Строка 4 : $post теперь ссылается на единичный div класса preview. Если мы взглянем в оригинальный HTML, то увидим, что третий элемент потомок - это тег H1 , который содержит заголовок статьи. Мы берем его и присваиваем $articles .

Помните о начале отсчета с 0 и учете комментариев исходного кода, когда будете определять правильный индекс узла.

Строка 5 : Шестой потомок $post - это

. Нам нужен текст описания из него, поэтому мы используем outertext - в описание будет включен тег параграфа. Единичная запись в массиве статей будет выглядеть примерно так:

$articles = “Заголовок статьи“;
$articles = “This is my article description“

Шаг 6, Работа со страницами

первым делом нужно определить, как найти следующую страницу. На сайте Nettuts+ о номере страницы очень легко догадаться по URL, но нам нужно получать ссылку в парсинге.

Если посмотреть на HTML, то можно найти следующее:

»

Это сслыка на следующую страницу, и мы можем легко ее найти по классу ‘nextpostslink ’. Теперь эта информация может быть использована.

If($next = $html->find("a", 0)) {
$URL = $next->href;
$html->clear();
unset($html);
getArticles($URL);
}

В первой строке мы проверяем, можно ли найти ссылку с классом nextpostslink . Отметим использование второго параметра в функции find() . Таким образом мы указываем, что хотим получить первый элемент (индекс 0) в возвращаемой коллекции. $next содержит единичный элемент, а не коллекцию.

Затем мы присваиваем ссылку HREF переменной $URL. Это важно, потому, что далее мы удаляем объект HTML. Чтобы предотвратить утечку памяти в php5, текущий объект simple_html_dom должен быть очищен и разустановлен, прежде чем другой объект будет создан. Если этого не сделать, то вся доступная память может быть поглощена.

В завершение, мы вызываем функцию getArticles с URL следующей страницы. Рекурсия прерывается, когда не остается страниц для парсинга.

Шаг 7. Вывод результатов

Первое, мы собираемся установить несколько основных стилей. Все абсолютно произвольно - вы можете устанавливать то, что нравится.

#main {
margin:80px auto;
width:500px;
}
h1 {
font:bold 40px/38px helvetica, verdana, sans-serif;
margin:0;
}
h1 a {
color:#600;
text-decoration:none;
}
p {
background: #ECECEC;
font:10px/14px verdana, sans-serif;
margin:8px 0 15px;
border: 1px #CCC solid;
padding: 15px;
}
.item {
padding:10px;
}

Затем мы пишем маленькую функцию на PHP в странице для вывода предварительно сохраненной информации.

foreach($articles as $item) {
echo "

";
echo $item;
echo $item;
echo "
";
}
?>

Окончательный результат - это одна страница HTML со списком всех статей со страниц Nettuts+, начиная с той, которая была указана в первом вызове getArticles() .

Шаг 8. Заключение

Если Вы запускаете парсинг для большого количества страниц (скажем, весь сайт), то это может занять много времени. На таком сайте как Nettuts+, который имеет боле 86страниц, процесс парсинга может длиться более минуты.

Данный урок открывает для вас тему парсинга HTML. Существуют другие методы методы работы с DOM, которые позволяют работать с селектором xpath для поиска элементов. Описанная в данном уроке библиотека проста для использования и отлично подходит для быстрого старта. Помните, что нужно спрашивать разрешения, прежде проводить скрепинг сайта.

Во время работы над обновлением сайтов, обратил внимание на свою старую вёрстку, когда ещё плохо был знаком с php. С учетом приобретённого опыта видны недостатки старого метода вёрстки, когда HTML обрамляет PHP, а не находится внутри него.

К сожалению, я так и не нашёл ничего интересного на этот счёт, чтобы почитать, как же всё-таки лучше верстать. Однако рассматривая современный код вёрстки всё чаще замечал, что html практически всегда находится внутри php конструкций. И в этом есть значительные преимущества.

Рассмотрю преимущества нахождения HTML внутри PHP на примере вывода заголовка в WordPress.

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

< ! -- Title -- >

< h3 class = "archive-entry-title" itemprop = "name" > < a href = " " rel = "bookmark" title = " " > ID , "name_rus" , true ) ) : ?> ID , "name_rus" , true ) ; ?> < / a > < / h3 >

< ! -- Title End -- >

В такой конструкции кода есть несколько недостатков. Во-первых он не наглядный – всё написано в одну строчку. Сделано это специально, для того чтобы не было пустых пробелов между тегами H1, H2, H3. Ведь ничего хорошего нет в том, если в тегах заголовка будут пробелы. Нельзя предсказать, как в этом случае, среди поисковых систем, подобное скажется на сайте. Будут ли лишние пробелы уменьшать силу заголовка или нет. Учитывая что ответов на такой вопрос нет, следует предположить худшее. А потому писать слитно.

Иначе, в продолжении сказанного, если сделать вышеприведенный код наглядным:

< ! -- Title -- >

< h3 class = "archive-entry-title" itemprop = "name" >

< a href = " " rel = "bookmark" title = " " >

ID , "name_rus" , true ) ) : ?>

ID , "name_rus" , true ) ; ?>

< / a >

< / h3 >

< ! -- Title End -- >

То при просмотре в браузере HTML кода страницы в заголовке тегов h3 увидим следующее:

Нам же нужно и чтобы код читался легко при редактировании и чтобы потом он также слитно отображался при загрузке сайта. А именно чтобы он выглядел таким образом:

Для этого следует воспользоваться PHP и завернуть весь html код в него. И получаем следующий вид php кода для заголовка WordPress:

< ! -- Title -- >

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

Рассмотрим обычный HTML-сайт

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


А немного страниц на таких сайтах потому, что когда такой сайт начинает разрастаться им становится очень неудобно управлять. По этой причине человек либо вообще перестаёт следить за сайтом, либо пытается использовать какую-нибудь систему управления контентом (CMS). Есть также люди, которые пытаются изучать языки программирования для WEB, чтобы сделать свой сайт автоматизированным и от этого более удобным в управлении.

Но как показывает опыт, только единицы справляется с этой задачей, и их сайты продолжают расти и развиваться.

А что же со всеми остальными?

Кто-то копается в Интернете, кто-то пытается покупать бумажные книги. Но без базовых знаний устройства подобных языков программирования, без понимания основ сайтостроения такие попытки обычно заканчиваются ничем.

С другой стороны давайте посмотрим на сайт, сделанный с использованием связки обычного HTML и простого языка программирования для web — PHP.

Самое главное отличие этого сайта от предыдущего в том, что такой сайт можно создавать как конструктор из блоков. Сделали шапку сайта – поместили её в отдельный фаил, сделали левый блок с навигацией по сайту – поместили в отдельный файл и т.д.

Что это нам дает?

Это дает свободу. Т.е. теперь мы можем подключать эти блоки к основному каркасу и даже если у нас со временем на сайте будет 10000 страниц и нам вдруг понадобится изменить какой-то элемент навигации, то ничего сложного в этом не будет. Открыли фаил с нужным блоком, отредактировали и всё! На всех 10000 страницах это изменение произошло в один миг.

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

— Сайт занимает меньше места;
— Упрощается резервное копирование данных;
— Облегчается изменение любых данных;
— Становится возможным подсчет любой информации (сколько раз посмотрели страницу, скачали файл, добавили комментариев и т.д.);
— На сайте можно использовать множество готовых PHP скриптов;
— и т.д.

HTML или PHP

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

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

Евгений Попов – Автор 22,5 часового видеокурса «Все Технические Моменты Онлайн Бизнеса в Видеоформате 2 или PHP+MySQL для начинающих «, в котором прямо на экране Вашего компьютера с голосовыми пояснениями показывается весь процесс создания PHP сайта с нуля.

Я многому научился о том, как работают структуры MVC, оглядываясь и изучая существующие. Кажется, что каждая инфраструктура, которую я вижу, имеет макет, где каждый метод в каждом контроллере имеет свой собственный файл шаблона. Таким образом, будет шаблон входа, шаблон выхода, регистр и т.д. И т.д.

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

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

$title = "Blah Blah Blah"; $user = "Jon Miller"; include "index.phtml"; <?php echo $title; ?>

login form

Я делал это

$title = "Blah Blah Blah"; include "header.phtml"; $user = "Jon Miller"; include "user.phtml"; include "login_form.phtml"; include "footer.phtml"; header.phtml <?php echo $title; ?> user.phtml

login_form.phtml
login form
footer.phtml

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

4 ответов

Одно слово: Организация. Разделение каждой части страницы позволит каждому из них просматривать/редактировать отдельно. Эта простая концепция очень полезна. Например, любой человек в команде, который хочет обработать процесс входа в систему, может легко понять, что им нужно отредактировать login_form.phtml , и они могут быть уверены, что редактирование login_form.phtml будет менее вероятно непреднамеренно вмешиваться в другие функции.

Как лучше всего, вот как я это делаю (не совсем, но похоже).

$Title = "Blah Blah Blah"; $User = "Jon Miller"; $ThemeName = "MyGreenPage"; $Contents = array("User", "Login_Form"); function Include($FileName) { if (file_exists($FileName)) include $FileName; }

MyGreenPage.phtml:

<?php echo $title; ?>

User.pcss:

/* Some styles needed by User */

User.pjs:

/* Some script needed by User */

User.phtml:

Login_Form.pcss:

/* Some styles needed by Login_Form */

Login_Form.pjs:

/* Some script needed by Login_Form */

login_form.phtml:

login form

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

Вы должны проверить понятия макеты "и" просмотр помощников . Хотя я связан с версией этих концепций Zend Framework, другие структуры MVC (и концепция MVC) также должны иметь их.

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

Чтобы включить что-то вроде формы входа на всех страницах, можно использовать помощник вида. Этот помощник вида может отображать текущего пользователя или отображать форму входа в систему в зависимости от состояния входа. Просмотр помощников может быть включен в макет или включен конкретным контроллером (пока структура MVC допускает некоторые виды сегментов рендеринга).

Двухступенчатый метод "include" работает лучше, чем линейное включение частей (включая заголовок, затем контент, затем нижний колонтитул - то, что вы делаете сейчас), потому что вашим шаблонам не нужно разделить HTML-теги. Руководство Zend имеет хороший визуальный пример шаблонов представлений в макете.

Самый распространенный способ создания шаблонов HTML с помощью PHP - использовать один из этих популярных шаблонов:

Кроме того, вы можете просто помещать заполнители в свой HTML, которые выглядят как <% variablename %> . Просто загрузите свой HTML-код, выполните регулярное выражение, найдите все заполнители и замените их соответствующими переменными.

В качестве альтернативы вы можете загрузить свой HTML, проанализировать его как документ DOM , а затем изменить свой DOM. Я создал библиотеку

От автора: PHP или HTML – что лучше? Никогда не задавайте такого вопроса профессионалу. Во-первых, в его глазах вы сразу «упадете» до уровня полнейшего «чайника». А во вторых… Такой вопрос может возникнуть только у полнейшего «чайного сервиза». Ну, значит сегодня у нас «чаепитие», посвященное этой странной теме.

Курица, яйцо – кто первый?

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

Для начала выясним, что собой представляет современный сайт. Чтобы долго не «шнырять» около да вокруг, сразу сведения. Сейчас любой веб-ресурс создается с помощью четырех технологий:

HTML – он (как и ранее) служит для разметки страниц на составляющие элементы.

CSS – отвечает за внешний вид сайта.

JavaScript – обеспечивает взаимодействие UI (пользовательского интерфейса) с человеком.

PHP – обеспечивает динамическое создание ресурсов и все вытекающие из этого «последствия»: CMS, плагины под них и т.д.

Да, чуть не забыл о еще MySQL. Это СУБД такая . Думаете, издеваюсь? Да нет! Просто тема у нас такая «чайная» — чем отличается HTMLот PHP. Я бы за эти вопросы Шнобелевские премии раздавал (такие есть).

Ну, так попробуйте выкинуть одну из перечисленных составляющих современного сайта и вы получите не динамический ресурс, а еле «плетущийся» статический ужас. Особенно, если избавиться от .

Различия на примерах

Устные доводы о приоритетности и различии двух дисциплин можно приводить бесконечно долго. Лучше отличия PHP от HTML разобрать на конкретных примерах. Выясним, в каком из вариантов будет легче поменять цвет фона.

Есть такой очень популярный движок, который называется WordPress. Он работает на PHP. Для сравнения, возьмем разметку обычной веб-страницы и попытаемся в ней изменить фоновый цвет. Затем то же самое реализуем с помощью админки CMS.

Чтобы лучше уяснить, чем отличаются HTML и PHP, постарайтесь найти в этом коде строку, отвечающую за цвет фона. Сразу подскажу, что ее здесь нет. Это стилевое свойство (background-color) нужно прописать. При этом надо знать, где его добавлять. А весь сайт состоит не из одной страницы, а десятков.

Теперь сделаем то же самое через административную панель WordPress. Для этого нам нужно перейти в визуальный редактор страницы и в установленной теме поменять соответствующий параметр путем нажатия нескольких кнопок.







2024 © gtavrl.ru.