Тарифы Услуги Сим-карты

Постраничный вывод (PHP и MySQL)

В этой статье я рассказывал, как получить набор данных из таблицы БД, соответствующей выбранной пользователем странице. В этой же статье мы разберём вывод Pagination на PHP . Pagination - это список самих страниц. В Интернете есть различные варианты, но все они страдают одним - огромное количество кода для создания бесконечного числа вариантов. Но Вам разве нужна бесконечность? Вам нужен только 1 вариант, который и будет стоять на сайте. В этой статье мы с Вами создадим относительно сложный pagination , но при этом кода будет совсем не много.

Чтобы создать Pagination на PHP , нам необходимо иметь на входе несколько параметров:

  • count_pages - количество страниц.
  • active - текущая активная страница.
  • count_show_pages - количество отображаемых страниц. Например, если будет 1000 страниц, то вывести их все весьма проблемно. Поэтому отображаться будет только заданное количество в этом параметре.
  • url - адрес страницы, для которой и создаётся Pagination .
  • url_page - адрес страницы с параметром page без значения на конце . Например, "/abc.php?func=create&page= ".

Теперь мы можем создавать Pagination , вот так это выглядит на PHP :

/* Входные параметры */
$count_pages = 50;
$active = 15;
$count_show_pages = 10;
$url = "/index.php";
$url_page = "/index.php?page=";
if ($count_pages > 1) { // Всё это только если количество страниц больше 1
/* Дальше идёт вычисление первой выводимой страницы и последней (чтобы текущая страница была где-то посредине, если это возможно, и чтобы общая сумма выводимых страниц была равна count_show_pages, либо меньше, если количество страниц недостаточно) */
$left = $active - 1;
$right = $count_pages - $active;
if ($left < floor($count_show_pages / 2)) $start = 1;
else $start = $active - floor($count_show_pages / 2);
$end = $start + $count_show_pages - 1;
if ($end > $count_pages) {
$start -= ($end - $count_pages);
$end = $count_pages;
if ($start < 1) $start = 1;
}
?>


Сразу скажу, что кода хоть и немного, но он достаточно сложный для новичков. Года 3 назад я потратил очень много времени, чтобы сделать нечто подобное и тогда кода получилось раза в 2 больше .

А дальше можно этот Pagination через CSS украшать так, как Вы пожелаете. Можно и вёрстку изменить при желании (например, вместо угловых скобок "Предыдущая страница " и аналогичных поставить красивые картинки), главное, не трогать PHP-код .

Вот такой весьма удобный Pagination реализован на этом сайте, а так же на некоторых моих других сайтах.

Всем привет! Сегодня мы с вами рассмотрим структуру любого шаблона WordPress сайта. Из каких базовых файлов и элементов она строится. Эти знания придадут вам уверенности в изменении и правке чужих шаблонов. А впоследствии, при наличии базовых знаний HTML, CSS, и PHP, создавать свои собственные темы. Но пока что мы так далеко заглядывать не будем, начнем с азов.

Основные файлы любого шаблона. Их назначение.

И так, любой шаблон по своей сути должен состоять из 10 базовых файлов. Так что давайте разбираться в них.

Пример структуры WordPress шаблона

style.css — файл таблицы стилей шаблона. Этот файл должен быть у любой темы, так как именно он отвечает за ее объявление, а так же может хранить дополнительную информацию: имя автора шаблона, версию шаблона, домашнюю страницу автора и т.д. Ну и, конечно же, прямое назначение — это все CSS стили.

index.php — файл отвечает за отображение главной страницы WordPress шаблона. При верстке своего макеты всегда помните, что главная страница может быть как статичной, так и динамичной.

single.php — файл, отвечающий за вывод каждого отдельного поста вашей темы. В качестве примера можно привести данную статью, которую вы читаете.

page.php — файл отвечает за формирование статичных страниц. Обычно это страницы: контакты, об авторе, о ресурсе и т.д.

header.php — формирует шапку сайта, и хранит в себе все важные метатеги для продвижения.

footer.php — файл отвечает за отображение подвала сайта.

sidebar.php — формирует отображение сайдбара или по-русски боковой колонки блога или сайта.

functions.php — файл, отвечающий за дополнительный функционал шаблона. Например: вывод последних комментаторов на моем блоге формируется именно в этом файле.

comments.php — файл отвечает за отображение комментариев у шаблона.

404.php — отвечает за отображение страницы с 404 ошибкой.

search.php — файл, отвечающий за отображение страницы поиска.

Необязательные файлы. Но об их существовании нужно знать.

category.php — файл отвечает за отображение анонсов в категориях (если файла нет, то формирование осуществляется за счет файла index.php)

tag.php — файл отвечает за отображение анонсов на странице тегов (если файла нет, то формирование осуществляется за счет файла index.php)

taxonomy.php — файл отвечает за отображение анонсов на страницах таксономии (если файла нет, то формирование осуществляется за счет файла index.php)

author.php — файл отвечает за отображение анонсов статей определенного автора (если файла нет, то формирование осуществляется за счет файла index.php)

attachment.php — отвечает за вывод прикрепленного файла.

searchform.php — отвечает за формирование формы поиска.

Если в вашем шаблоне присутствуют файлы из не обязательного списка, то вы должны знать, они всегда имеют приоритет выше, чем файл index.php. Это можно объяснить тем, что index.php — это общий случай, а допустим tag.php — это уже частный. Те более конкретный, следовательно, его и нужно воспринимать.

А что хранится в папках?

Папки обычно служат для хранилища определенного типа файлов. Например: папка(image, images, img и тд) хранит в себе файлы изображений, которые относятся к данной теме. Папка JS хранит файлы скриптов. Папка inc хранит php файлы, которые инклюдятся (включаются) в существующие файлы темы.

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

Screenshot.png — это что за зверь?

Обычно этот файл содержит скриншот шаблона, чтобы в админке, когда вы выбирали тему для сайта или блога, могли видеть ее в качестве миниатюры. Размер этого файлика должен быть 880x660px.

Визуальное представление структуры шаблона

Схематичное изображение wordpress шаблона

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

upd: Осторожно, текст содержит сатиру и кодобред

Язык программирования PHP берёт своё начало в 1995 году и является продуктом эпохи зарождения современных веб стандартов, таких как http (версия 1.0 - 1996), html (версия 2.0 - 1995), javascript (1995 год), url (1990 - 1994 года). Первоначально аббревиатура php имела расшифровку Personal Home Page Tools, далее трансформировавшись в Hypertext Preprocessor или «препроцессор гипертекста». Об использовании PHP в качестве препроцессора и будет посвящено несколько следующих абзацев.

Интерпретатор PHP позволяет вставлять в любой текст специальные тег , с помощью которого можно подставить в страницу динамический контент, что очень удобно использовать внутри html документов. Полученный результат сразу подаётся на стандартное устройство вывода, известное как stdout (подробнее смотри ). Есть возможность буферизовать вывод до востребованности через функцию ob_start , но для нашей первой html страницы это не понадобится. Самый последний стандарт html под номером 5 ввёл несколько новых тегов для упрощения разметки, повышения читаемости и семантичности веба (что бы это не значило). Поэтому сразу воспользуемся всей мощью HTML5 и напишем шаблон страницы со вставками на рассматриваемом препроцессоре.

Сохраним эту страницу в файл index.html. Функционал блога в первой его версии будет предусматривать хранение публикаций в виде html страниц внутри заранее заданной директории (например pages/) и меню позволяющее перейти сразу на нужную публикацию.

Пример публикации, которая будет выведена в ленту блога.

В корне проекта добавим директорию pages/ и сохраним нашу статью под произвольным именем, например как 2018-trends.html.

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

Скрипт для обработки входных данных:

Код блога:

main.go

package main import ("encoding/json" "io/ioutil" "net/http" "os/exec" "strings" "github.com/labstack/echo") func main() { e:= echo.New() e.GET("/", index) e.GET("/pages/:page", index) e.Start(":8000") } func index(c echo.Context) error { outData:= struct { Menu string `json:"menu"` Pages string `json:"pages"` }{} outData.Menu = make(string, 0) outData.Pages = make(string, 0) page:= c.Param("page") files, _ := ioutil.ReadDir("pages") for _, file:= range files { if !file.IsDir() { outData.Menu = append(outData.Menu, file.Name()) } if page != "" && page == file.Name() { fbody, _ := ioutil.ReadFile("pages" + "/" + file.Name()) outData.Pages = append(outData.Pages, string(fbody)) } else if page == "" { fbody, _ := ioutil.ReadFile("pages" + "/" + file.Name()) outData.Pages = append(outData.Pages, string(fbody)) } } rendered:= renderContent(outData) return c.HTMLBlob(http.StatusOK, rendered) } func renderContent(input interface{}) byte { jsonInput, _ := json.Marshal(input) tmplEngine:= exec.Command("php", "-f", "index.php") tmplEngine.Stdin = strings.NewReader(string(jsonInput)) rendered, _ := tmplEngine.Output() return rendered }


Теперь запускаем на исполнение программу через go run и делаем запрос на страницу через любой браузер, например таким образом:

Links2 http://localhost:8000

Результат представлен на КДПВ.

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