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

26 november 2015, 21: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 следующий вид.

Эксперемент MODX: сетка сателитов

Что нужно?

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

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

SEQUEL.ONE
1    3151    0
0

Comments ()

    You need to login to create comments.