реализация разделителя страниц (cut, кат) на php + mysql

Авг. 2, 2010| 23:46

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

Процесс:

  1. Создание записи (с катом или без него)
  2. Отображение списка записей (полных или текста только до ката)
  3. Отображение записи полностью

1. При создании записи в месте, где будет разрыв ставится комбинация "––––". В статью без ката ничего не ставим. При сохранении записи проверяем есть ли разрыв: если есть, ставим флаг, что в записи есть кат; если нет, дописываем четыре дефиса к концу записи (зачем объясню чуть позже):

if(strpos($insert['entry'], '––––'))
{
    $insert['is_cuted'] = 1;
}
else
{
    $insert['entry'] = $insert['entry'].'––––';
}

2. Для отображения списка записей (например, первых 10) обычно делается запрос вида к базе данных mysql : "SELECT name, entry FROM entries LIMIT 10 OFFSET 0;". Мы же его немного изменим, чтобы из записи брался текст только до разделителя. Я думаю есть люди, которые берут полностью всю запись, а потом уже средствами php берут текст только до ката, но не надо перекладывать на приложение то, что может сделать база данных. итак запрос : "SELECT name, SUBSTRING(entry, 1, LOCATE('––––', e.entry) - 1) as entry, is_cuted FROM entries LIMIT 10 OFFSET 0;". Этот запрос даст нам как раз текст до разделителя. Именно поэтому мы дописывали дефисы к статьям без разрыва. В приложении мы проверяем флаг разрыва, если есть - дописываем в конце статьи ссылку для просмотра далее.

Узнать больше о функциях SUBSTRING и LOCATE.

3. Просмотр полной записи. Запрос к базе обычный : "SELECT name, entry FROM entries WHERE id = 1;". А на стороне приложения удаляем все дефисы :

$data['entry'] = preg_replace("/(-){2,}/", '', $data['entry']);

Это регулярное выражение удалит последовательность из двух или более дефисов


Метки: php, mysql, howto
  • Хельги, Авг. 3, 2010| 21:36
    У меня четыре дефиса давали , это часть вики-синтаксиса. Отрезание по первой линейке — это был такой хак. :)

    Сейчас я, кстати, отказался от ката. Зачем кликать, когда можно крутить, как заметил Илья Бирман.

    И да, когда ты удаляешь дефисы, ты уверен, что не удалишь чего-нибудь нужного из текста? Например, если бы у тебя в этой записи кат стоял не до, а после примера кода, в котором эти самые четыре дефиса есть?
    reply to this
    • Хельги, Авг. 3, 2010| 21:37
      Зачем резать HTML, когда его можно квотировать? Четыре дефиса давали HR, линейку.

      Сделай предварительный просмотр при отправке комментария и запоминание имени комментатора. :)
      reply to this