Автоматизация врезки переменных в тексты для rss
Нужно собрать интерфейс для автоматизации выдачи однотипных текстов, с предварительным пропарсиванием переменных, множественным сайтам через rss. Для удобства объяснения в самом конце я привожу ориентировочную структуру базы, на основе этой схемы идут объяснения в тексте ТЗ. Реализация на php+mysql. Желательно отделить код страниц от дизайна, скажем, с помощью Smarty.
Итак, есть сайты, категории, тексты и переменные и, соответственно, для всех таблицы.
Сайты обращаются к этому движку и получают персонализированную выдачу через rss. То есть для выдачи каждому из сайтов нужно сформировать свою rss ленту, например, rss.php?site=1&cat=1 - выдает посты категории 1 для сайта 1, если категория не задана - выдает все посты.
Посты получаются из шаблонных текстов через врезку в них специфических для каждого из сайта переменных.
Тексты содержат ссылки на переменные в виде %VAR_NAME%.
Каждая переменная имеет дефолтное значение определенное в табл vars, которое может быть перебито кастом-значением этой переменной, индивидуально заданным для данного сайта. Дефолтные и кастом переменные можно хранить как общей таблице с указанием тогда id сайта к которому они относятся (0 - дефолт), так и отдельно, как удобнее.
Переменные должны допускать вложенность. Т.е. %VAR_2% может равняться, например, "blah blah %VAR_1%". Единственное, надо защитить от бесконечных циклов, если юзер сдуру сделает кольцо из взаимоопределяющихся переменных.
Работа происходит следующим образом.
Юзер заходит на add_text.php
Видит форму
Title (textarea)
Text (textarea)
Category (select)
Save (button)
Сбоку от формы выводится список имен всех доступных в системе переменных для удобства вставки.
Вводит данные и сохраняет форму.
Данные сохраняются в таблицу posts со статусом New
manage_texts.php
В виде таблички выводится список всех текстов в системе.
id name category status action
action в данном случае post ,edit, delete
post_text.php
Открывает форму для постинга заданного текста
ID Name Category (для этого текста в системе)
Date range (text field) - сюда юзер вводит разброс дат постинга в днях. Если не заполнил, то будет использоваться дефолтное значение 30 дней.
далее список всех сайтов с чекбоксами в скобках полсе имени каждого из сайтов указать число уже запощенных на него текстов (select из таблицы posts)
Submit (button)
Кнопки js: Check all Check Random 25% Check Random 50% Check Random 75% отмечают автоматом все чекбоксы или заданный процент случайно
Юзер чекает, на какие сайты он хочет это отправить, и жмет сабмит.
По сабмиту юзеру данные сохраняются в таблицу posts пока со статусом New. date - дата когда которой данный пост будет датирован задается прибавлением к текущей дате случайного интервала времени из промежутка указанного в Date Range. Если юзер указал 30, например, то посты будут публиковаться в течение месяца. Все, пост в rss, соответсвенно, должен будет появлиться только когда заданный момент в поле date уже пройдет.
Далее, открывается большая таблица со сгенерированными текстами (title + date + text) и отмеченными чекбоксами.
Юзер еще раз проверяет тексты, если где-то что-то не так он может снять галочку с данного текста.
По сабмиту отмеченные посты меняют статус на Posted в таблице Posts, и сам текст в таблице texts меняет статус на Posted. Неотмеченные посты генерятся повторно (данные в таблице posts переписываются) и юзеру выводится снова форма подтверждения для уже оставшихся постов.
++++++++++++++++++++++++
Предлагаю следующую структуру базы (просто для пояснениня сути тз)
sites
-----
id
name
url
vars
----
id
name
value
site_id
texts
-----
id
name - имя текста внутри системы, выводится как название текста
title - реальное название текста, обрабатывается врезкой переменных
text - сам текст, обрабатывается врезкой переменных
cat_id
status (New|Ready|Posted)
posts
-----
id
text_id
site_id
title
text
time
status (New|Posted)
cats
----------
id
name