Несмотря на то, что Textpattern является очень удобным и легким движком, его популярность заметно уступает другим CMS для блогов, например, тому же WordPress. Коммьюнити Textpattern намного менее активно, так что многие плагины, заброшенные их авторами, так и не были «допилены» до новых версий CMS, а многие опции движка так и остались нереализованными. Поэтому большинству владельцев web-ресурсов на Текстпаттерне приходится или расширять функционал сайта самостоятельно, или заказывать плагины и моды у фрилансеров.
Так в репозитории Textpattern не имеется ни одного плагина, который позволял бы импортировать быстро на сайт статьи из текстовых файлов. А ведь это весьма полезная опция, которая может пригодиться при заполнении web-ресурса заранее подготовленными статьями или переносе на Textpattern сайта на HTML.
Столкнувшись с разовой необходимостью добавить на сайт несколько сотен заранее подготовленных статей, мы решили не писать для этого плагин, а воспользоваться возможностью встраивать 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.
Будьте внимательны и не обновляйте страницу со статьей в браузере, иначе все статьи импортируются несколько раз. Желательно сделать бэкап базы данных перед импортом.