Автоматизация врезки переменных в тексты для rss

Иван20 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
01.11.2007

Нужно собрать интерфейс для автоматизации выдачи однотипных текстов, с предварительным пропарсиванием переменных, множественным сайтам через 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