Бесплатные CMS > CMS Textpattern > Textpattern Import

Импорт статей в Текстпаттерн

Несмотря на то, что Textpattern является очень удобным и легким движком, его популярность заметно уступает другим CMS для блогов, например, тому же WordPress. Коммьюнити Textpattern намного менее активно, так что многие плагины, заброшенные их авторами, так и не были «допилены» до новых версий CMS, а многие опции движка так и остались нереализованными. Поэтому большинству владельцев web-ресурсов на Текстпаттерне приходится или расширять функционал сайта самостоятельно, или заказывать плагины и моды у фрилансеров.

Так в репозитории Textpattern не имеется ни одного плагина, который позволял бы импортировать быстро на сайт статьи из текстовых файлов. А ведь это весьма полезная опция, которая может пригодиться при заполнении web-ресурса заранее подготовленными статьями или переносе на Textpattern сайта на HTML.

Textpattern import: как импортировать статьи

Столкнувшись с разовой необходимостью добавить на сайт несколько сотен заранее подготовленных статей, мы решили не писать для этого плагин, а воспользоваться возможностью встраивать PHP-код в страницы и статьи Textpattern. Возможно, более опытные пользователи Текстпаттерна сочтут эту идею глупой, однако данный код является рабочим и очень легким в использовании.

Итак, что надо сделать, чтобы импортировать статьи в Textpattern?

1. Подготавливаем список статей и загружаем его на сайт, например, в директорию site.ru/text/.

Надо отметить, что в нашем случае все подготовленные статьи находились в текстовых файлах с названиями типа article-name.html.txt, что впоследствии было использовано для создания url-адресов статей.

2. Включаем возможность исполнения PHP-кода в страницах в настройках Textpattern: Настройки – Главные – Разрешить PHP в страницах? – Да.

3. Создаем страницу с названием Import_article_page и начинаем писать код для импорта файлов. Весь код необходимо обрамить тегами и <txp:php> и </txp:php> - это специальный тег, необходимый для выполнения PHP-кода.

4. Подключаем глобальную переменную $parentid:

global $parentid;

5. Создаем переменные, где будет содержаться имя автора, название категории и секции, куда будут записываться статьи:

$author = 'SuperMegaUser';
$category = 'test';
$section = 'koshki';

Автор, категория и секция должны быть существующими.

6. Получаем список файлов, расположенных в директории, куда мы пометили текстовые файлы со статьями:

$dir = $_SERVER['DOCUMENT_ROOT'].'/text/';

7. Переносим список файлов в массив и вычитаем из массива 2 лишних пустых элемента:

$files = array_diff(scandir($dir), array('..', '.'));

8. При помощи цикла foreach обрабатываем полученный массив:

foreach ($files as &$file) { 

9. В переменную $url будут заноситься названия файлов для последующего использования их в адресах статей (название файла – '.txt'):

$url = str_replace(".txt", "", $file);

10. В переменной $content будет содержание файлов, то есть, собственно статьи:

$content = file_get_contents ($dir.$file);

11. Нам было необходимо почистить статьи от лишних пробелов, поэтому в PHP-код были добавлены еще две строчки:

$content = trim($content);
$content = preg_replace("/ {2,}/"," ", $content);

12. В переменную $title заносятся первые 30 символов из статьи, в дальнейшем эта переменная будет использоваться для формирования названия:

$title = substr($content, 0, 30);

13. Воспользуемся встроенной в Textpattern функцией safe_insert и импортируем статью в базу данных:

$parentid = safe_insert('textpattern',
"AuthorID='$author', //автор
Title='$title', // название статьи
Body='$content', //статья
Body_html='$content', //статья
Category1='$category', //имя категории
Status='1', //
Section='$section', //имя секции
custom_2='$title', //дополнительное поле, если имеется
url_title='$url'");//адрес статьи

Если вы хотите сразу опубликовать статьи, укажите Status='4'. Если вы собираетесь внести в них правки, укажите Status='1', тогда статьи добавятся в базу данных как наброски.

Готовый код:



global $parentid;

$author = 'SuperMegaUser';
$category = 'test';
$section = 'koshki';

$dir = $_SERVER['DOCUMENT_ROOT'].'/text/';
$files = array_diff(scandir($dir), array('..', '.')); // убираем 2 пустых элемента
foreach ($files as &$file) {
$url = str_replace(".txt", "", $file);
$content =  file_get_contents ($dir.$file);
$content = trim($content);
$content = preg_replace("/ {2,}/"," ", $content);
$title = substr($content, 0, 30);

$parentid = safe_insert('textpattern',
"AuthorID='$author',
Title='$title',
Body='$content',
Body_html='$content',
Category1='$category',
Status='1',
Section='$section',
custom_2='$title',
url_title='$url'");
}

14. Теперь создайте секцию Import_article_section, которая будет использовать страницу Import_article_page, где находится код.

15. Создайте пустую статью в секции Import_article_section. Как только вы перейдете по ее адресу (можно просто нажать на ссылку «Вид»), все статьи из директории text импортируются в БД Textpattern.

Будьте внимательны и не обновляйте страницу со статьей в браузере, иначе все статьи импортируются несколько раз. Желательно сделать бэкап базы данных перед импортом.


Меню сайта

Импорт статей в Текстпаттерн
Импорт статей в Текстпаттерн