Пишемо на PHP Новини на головну сторінку
Як і обіцяв, сьогодні працюємо з новинами.
Якщо я ще пам'ятаю вчорашній випуск, ми вигадали формат для зберігання новини.
Виходячи з цього формату нам треба отримати короткий варіант новин для "морди" і повний варіант для розділу "новини" з розбиттям всього списку новин на сторінки.
Почнемо з новин на титульну сторінку (морду).
У нас для анонсів передбачено спеціально поле рядку запису новини. Окрім неї візьмемо дату новини, якщо новини у нас виходять не часто (щодня чи рідше) або час новини, якщо новини у нас йдуть як із кулемета.
Ще нам знадобиться "обмежувач" кількості коротких новин - ще одна змінна вvars-NEWS_MAIN_MAX- ми її назвемо.
А ім'я файлу для титульних новин ми визначили у минулому випуску:/news/main.inc.
Цього буде достатньо, мені здається.
Тепер велике та філософське питання про те, в який клас нам запхати функції роботи з новинами.
Напрошується класout. Чи згодні? Бачу, що згодні.
Ох, люблю я вас вести за ніс!
Ну який може бути виведення новин через клас? Ви що, збираєтесь висмикувати новини з архіву для кожного користувача?
Звичайно ж ні. Тут розмови бути не може - новинні файли повинні формуватися на диск в момент будь-якої зміни в головному файлі новин і підключатися на сайт простим includ-ом.
А це означає, що всі (майже всі) функції роботи з новинами у нас підуть у класin. Вірніше, я пропоную породити від класуinкласclass_in_newsі в ньому зберігати всі функції обробки новин.
Отже. Створюємо файл/req/in_news.class.
І. знову вдаряємося у міркування. Міркування, друзі мої, — у нашій справі далеко неостання річ, а то й перша.
Коли потрібно звертатися до формування файлів новин? Очевидно, що тільки після внесення якихось змін до основного файлу новин. Це означає, що нам потрібна функція, що створює файли новин. Цю функцію ми будемо викликати з усіх функцій, які вносять будь-яку зміну до основного файлу новин.Перечитувати цей абзац до повного розуміння.
Ви можете зараз сказати, скільки та яких файлів нам треба буде створювати? Я, чесно кажучи, дуже важко це зробити. Тому створимо першу функціюin_news_files_create(), яку і викликатимемо для формування новинних файлів. Тобто це буде якийсь акумулятор функцій, що створює структуру файлів новин на диску.
Першою "робочою" функцією станеin_news_main(). Саме в ній ми зробимо вибірку потрібних рядків у файл/news/main.inc.
В одному з випусків я вже розповідав про роботу з файлами, тому не загострюватиму увагу на ключових словах мови, що використовуються, скажу лише, що використовувати ми будемо найпересічніші команди.
Як відбувається складання файлу для морди.
Алгоритм простий як барабан. Потрібно прочитати від початку файлу $NEWS_MAIN_MAX рядків, видерти з них дату та анонсну частину тексту та записати це у файл.
Зробимо це в реалі:
Так, мало не забув! Вихідний файл для зберігання новин так і зватимемо — source.inc — вихідник.
Створили файл/news/source.inc:
Ну. нічого страшного, нехай буде такий убогий для початку.
Далі створюємо вclass_in_newsфункціюin_news_main(). Ось такий файл у мене вийшов:
Поясняти треба? Пояснюю.
Відкрили файл для запису/перезапису та для читання. Встановили спадний лічильник на потрібнекількість рядків новин. Почали цикл while за умовою лічильника або кінця файлу Прочитали рядок Перевірили, якщо починається вона не з "в'язниці" і має менше двох роздільників "
" (щоб не обробляти рядки неправильно створені) Розділили рядок на чотири складові Дві потрібні записали в новий файл з потрібним форматуванням Зменшили лічильник на одиницю Закрили цикл while Закрили файли Повернули нульовий код помилки
Все, як завжди, просто та логічно. Як і має бути у коді програми.
Всі, новини на морду у нас тепер створюються! Ура! Лише ця. як виконати функцію, а? Вона ж у нас призначена для автоматичного виконання інших функцій.
Ось ми й підійшли до створення ще однієї важливої директорії нашого проекту. Навіть не однієї, а одразу двох!
Справа в тому, що в житті будь-якого, навіть найпродуманішого сайту виникають ситуації, що вимагають ручного запуску тієї чи іншої автоматичної функції. Це може знадобитися і для наших новин.
Крім цього, існують функції, які необхідно запускати як із скриптів, так і з деякою періодичністю із cron-а.
У директорію/utils/ми складатимемо файли для ручного виконання будь-яких операцій, а директорію/cron/складатимемо скрипти для періодичного виконання.
Будь ласка, створіть обидві ці директорії у своїх проектах.
Файли, які живуть у цих директоріях мають, як правило, лише кілька рядків коду - вони лише підключають потрібний клас і викликають потрібну функцію.
Поклавши в папку/utils/файлcreate_news.phpтакого змісту:
Цей файл ми можемо виконати з командного рядка, надавши йому вигляд програми, що виконується. Особисто я цього ніколи не роблю. Мені приємнішезапускати подібні скрипти, підставляючи їх імена як параметр php, зібраний для командного рядка. Але це лише справа звички.
Головне що? Головне, що цей скрипт я запустив і отримав на сайті новинну колонку з коротких анонсів. Потім треба буде забезпечити їх посиланням на повну новину, але це вже після того, як буде створено сторінку трансляції повних новин.