Архив рубрики ‘ Хитрости PHP

Хитрости PHP: Разбиваем на страницы

Очень часто встречающаяся задача вывести данные из БД, при этом разбив по страницам. Первая идея которая приходит в голову сделать дубль запроса с подсчетом строк и поделить на количество строк которые будут выводиться на одной страницы. Но естественно меня это не устраивает по причинам:

  1. Лишний запрос к БД.
  2. Не удобно использовать, так как функцией сделать для разных видов запросов не возможно, а я хотел, чтобы все считалось именно функцией.

Решением этой задачи стала опция в select запросе - SQL_CALC_FOUND_ROWS которая запоминает количество найденных строк в запросе и возвращает при запросе SELECT FOUND_ROWS(). Эта опция и дает возможность создать функцию которая запускается после основного запроса и выводит список страниц.
Читать запись полностью »

Хитрости PHP: INCLUDE vs MYSQL на примере php меню

Недавно пришлось писать меню для CMS  (именно для той о которой я писал в пред идущем посте Хитрости PHP: Якорная вставка функций я еще много про эту CMS расскажу). Думаю многие  сталкивались с такой задачей, это не сложный скрипт. Я решил сделать меню, максимально универсально.

Основные требования которые я перед собой поставил при написание меню:

  1. Возможность быстро и удобно менять внешний вид меню (вертикальное, горизонтальное, выпадающее и тп.), с минимальным присутствием программиста.
  2. Возможность выводить в меню, пункты модулей (например модуль “новости”, рубрики новостей должны быть подразделами, хотя сами рубрики хранятся отдельно).

Читать запись полностью »

Хитрости PHP: Якорная вставка функций

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

  1. Модульность, с легкой возможностью подключения и отключения модулей.
  2. Возможность дописывания модулей другими программистами, без доступа к ядру CMS (что подразумевало написания хорошего мануала).

Первый пункт особой сложности для меня не представлял, решался он разработки архитектуры файлов модулей и разработкой алгоритма подключения/отключения/настройки модулей, а вот со вторым пришлось подумать…

Решений я видел несколько:

  1. Вставлять в ключевых местах CMS циклы с подключениями файлов модулей. Например, если существует файл в папке модуля с именем include_page.php то подключать его перед выводом страницы тем самым, создав этот файл, можно получить доступ к редактированию данных страницы. Но мне это решение не понравилось. Очень много файлов, да и не удобно, сложно управлять порядком подключения дополнительных файлов, плюс некоторые файлы могут конфликтовать, т.к. нет ни какой иерархии и архитектуры. В общем как идея она имеет место, но я ее не принял.
  2. “Якорная вставка функций” - это не научное название, просто я это так назвал:). И именно этот вариант я и выбрал. Сейчас расскажу как оно работает.

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