Сетка сателитов и парсер контента на MODX Revo (часть 2)

26 ноября 2015, 22:14

Во второй части мы рассмотрим вариант парсинга контента по ключевым словам и автоматическим добавлением контента с определённым контекстом. MODX Revo - это фреймворк, который всё сохраняет в базе и берёт из базы данных через xPDO, который в свою очередь получает значения в json. Нам нужно будет контент загружать в базу данных MySQL. Контент загружается в таблицу modx_site_content, которая имеет вот такую структуру: CREATE TABLE IF NOT EXISTS `modx_site_content` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `type` varchar(20) NOT NULL DEFAULT 'document', `contentType` varchar(50) NOT NULL DEFAULT 'text/html', `pagetitle` varchar(255) NOT NULL DEFAULT '', `longtitle` varchar(255) NOT NULL DEFAULT '', `description` varchar(255) NOT NULL DEFAULT '', `alias` varchar(255) DEFAULT '', `link_attributes` varchar(255) NOT NULL DEFAULT '', `published` tinyint(1) unsigned NOT NULL DEFAULT '0', `pub_date` int(20) NOT NULL DEFAULT '0', `unpub_date` int(20) NOT NULL DEFAULT '0', `parent` int(10) NOT NULL DEFAULT '0', `isfolder` tinyint(1) unsigned NOT NULL DEFAULT '0', `introtext` text, `content` mediumtext, `richtext` tinyint(1) unsigned NOT NULL DEFAULT '1', `template` int(10) NOT NULL DEFAULT '0', `menuindex` int(10) NOT NULL DEFAULT '0', `searchable` tinyint(1) unsigned NOT NULL DEFAULT '1', `cacheable` tinyint(1) unsigned NOT NULL DEFAULT '1', `createdby` int(10) NOT NULL DEFAULT '0', `createdon` int(20) NOT NULL DEFAULT '0', `editedby` int(10) NOT NULL DEFAULT '0', `editedon` int(20) NOT NULL DEFAULT '0', `deleted` tinyint(1) unsigned NOT NULL DEFAULT '0', `deletedon` int(20) NOT NULL DEFAULT '0', `deletedby` int(10) NOT NULL DEFAULT '0', `publishedon` int(20) NOT NULL DEFAULT '0', `publishedby` int(10) NOT NULL DEFAULT '0', `menutitle` varchar(255) NOT NULL DEFAULT '', `donthit` tinyint(1) unsigned NOT NULL DEFAULT '0', `privateweb` tinyint(1) unsigned NOT NULL DEFAULT '0', `privatemgr` tinyint(1) unsigned NOT NULL DEFAULT '0', `content_dispo` tinyint(1) NOT NULL DEFAULT '0', `hidemenu` tinyint(1) unsigned NOT NULL DEFAULT '0', `class_key` varchar(100) NOT NULL DEFAULT 'modDocument', `context_key` varchar(100) NOT NULL DEFAULT 'web', `content_type` int(11) unsigned NOT NULL DEFAULT '1', `uri` text, `uri_override` tinyint(1) NOT NULL DEFAULT '0', `hide_children_in_tree` tinyint(1) NOT NULL DEFAULT '0', `show_in_tree` tinyint(1) NOT NULL DEFAULT '1', `properties` mediumtext, PRIMARY KEY (`id`), KEY `alias` (`alias`), KEY `published` (`published`), KEY `pub_date` (`pub_date`), KEY `unpub_date` (`unpub_date`), KEY `parent` (`parent`), KEY `isfolder` (`isfolder`), KEY `template` (`template`), KEY `menuindex` (`menuindex`), KEY `searchable` (`searchable`), KEY `cacheable` (`cacheable`), KEY `hidemenu` (`hidemenu`), KEY `class_key` (`class_key`), KEY `context_key` (`context_key`), KEY `uri` (`uri`(333)), KEY `uri_override` (`uri_override`), KEY `hide_children_in_tree` (`hide_children_in_tree`), KEY `show_in_tree` (`show_in_tree`), KEY `cache_refresh_idx` (`parent`,`menuindex`,`id`), FULLTEXT KEY `content_ft_idx` (`pagetitle`,`longtitle`,`description`,`introtext`,`content`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=464 ; А вот вывод в обзоре нашей статьи:

11 - ID нашего документа; 'document' - Тип нашего документа; 'text/html' - Тип выводимых данных нашего документа; 'Заголовок' - Заголовок pagetitle нашего документа; 'Расширенный заголовок' - Расширенный заголовок longtitle нашего документа; 'Описание' - Описание description нашего документа; 'index' - Псевдоним нашего документа; '', 1, 0, 0, 2 - ID родителя нашего документа, иначе 0; 0, 'Контент' - Здесь находится контент нашего документа; 1, 20, 1, 1, 1, 4, 1448572478 - Дата создания документа; 4, 1448572648 - Дата редактирования документа; 0, 0, 0, 1448572478 - Дата публикации документа; 4, '', 0, 0, 0, 0, 0, 'Ticket' - Класс документа, по-молчанию modDocument; 'web' - Контекст нашего документа; 1, 'index/' - URI нашего документа; 1, 0, 0, '{"tickets":{"disable_jevix":false,"process_tags":false}}' - наборы параметров, по-умолчанию NULL.

Давайте её разберём, чтобы понять в каком направлении нам двигаться дальше. При детальном изучении структуры мы видим, что разграничение контента идёт по полю context_key, тоесть в это поле вставляется ключ контентекста, к которому пренадлежит контент. Имеет таблица modx_context следующий вид.

Что нужно?

  1. Парсер у нас должен иметь выбор контекста по ключу;
  2. Выбор шаблона документа (возможно взять на заметку возможность подставлять определённый шаблон родителю и дочернему документу);
  3. Уметь создавать дочерние документы;
  4. Раставлять даты публикации с интервалом, для отсроченной публикации;
  5. Уметь делать автоматическую перелинковку по ключевым словам;
  6. Добавлять картинки к контенту, а также парсить видео с youtube.com к документам по ключевым словам.

Сетка сателитов и парсер контента на MODX Revo (часть 1)

SEQUEL.ONE
1    1359    0
0

Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.