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

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

Во второй части мы рассмотрим вариант парсинга контента по ключевым словам и автоматическим добавлением контента с определённым контекстом.

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 ;
А вот вывод в обзоре нашей статьи:

11ID нашего документа;
'document'Тип нашего документа;
'text/html'Тип выводимых данных нашего документа;
'Заголовок'Заголовок pagetitle нашего документа;
'Расширенный заголовок'Расширенный заголовок longtitle нашего документа;
'Описание'Описание description нашего документа;
'index'Псевдоним нашего документа;
'',
1,
0,
0,
2ID родителя нашего документа, иначе 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)
26 ноября 2015, 22:14    SEQUEL.ONE Эксперименты 1    432 +1

Отзывы ()

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