Из 1С в WordPress

Возник как-то вопрос о том, каким образом можно перенести часть базы из 1с v7.7 в wordpress. Необходимо было сделать один из справочников из 1С в wordpress в виде каталога.

Итак разберёмся. В wordpress можно экспортировать данные файлом xml, определённым образом построенным. В 1С базы обычно хранятся в файлах dbf. Существует несколько путей решения, можно работать с dbf напрямую (используя инструмент dbase ) или же переконвертировать нашу базу в удобоваримый формат (xml, mysql или даже txt), благо конвертеров из одного формата в другой хватает на просторах интернета. Если пойти первым путём, то сперва стоит покопаться в файле 1cv77.dd, это словарь данных, который описывает таблицы БД, открывается обычным блокнотом. По второму пути – соответственно поискать необходимый конвертер в интернете.

Моя задача осложнялась тем, что база хранилась в формате MS SQL(не путать с MySQL :)), и доступ к базе был только через интерфейс 1С. Через какое-то время нашёл решение - tool2dbf.zip - обработка выгрузки любого справочника платформы 1С:Предприятие в таблицу формата *.DBF. Позволяет выгрузить любую таблицу в dbf файл. С dbf я возиться не стал и воспользовался конвертировщиком в xml . С получившимся файлом удобно работать используя SimpleXML (ещё один удобный инструмент php, предназначен для работы с xml, как и следует из названия). Для пример кусок получившегося xml файла:

Теперь необходимо выстроить этот файл таким образом, чтобы его воспринял wordpress. Структуру внутри wordpress будем строить такую: наименование – это собственно пост, ну а папка, в которой лежит это наименование – это категория. Структруа же нашего xml файла содержит примерно такие поля: код(CODE), короткое описание(DESCR), код родителя(PARENT), группа (GROUP, пусто, если не группа, и 1, если группа), полное описание(FULLDESCR) и некоторые другие поля, которые нам не важны.
Пример файла, который необходим для импорта, вы можете получить просто экспортнув свои данные через админку. В этом файле содержится много полей для каждого поста, я же пошёл путём минимализма и проверил какой минимум необходим при импорте, чтобы wordpress воспринял посты нормально. В итоге получилась примерно следующая схема для поста:

Первые пункты понятны из описания, пункт wp:status отвечает за то, опубликован пост или ещё находится в черновиках, ну а последний пункт – это соответственно тип данных(пост или страница).
Категории же выглядят следующим образом:

Стоит отметить, что такая запись отличается, от стандартной, которую вы увидите при экспорте в xml. Например:

И кусок из item:

По подобному принципу я пытался сделать импорт, но почему то статьи не привязывались к рубрикам. Немного поэксперементировав пришёл к решению, которое описал выше, главное чтоб у вас стоял и был автивирован плагин rustolat, он сделают всю работу по добавлению к рубрикам короткого названия на латинице для урла.
Исходный файл известен, файл, который мы должны изучить, тоже известен, приступим к преобразованию из одного в другой.
Алгоритм работы следующий:
1) собираем все рубрики, для этого нам поможет признак в файле, дополнительно не забываем собрать id-шники рубрик, они нам пригодятся на следующем шаге,
2) после отсева рубрик собираем наши посты и присваиваем их определённой рубрике, рубрика указана id-шником в , вот тут нам и пригодятся собранные id-шники с именами рубрик, чтобы заменить уже циферку на название.
Используем простое и удобное средство для работы с xml файлами SimpleXML, весь код:

Скрипт открывает файл export.xml и работает с ним через инструменты, а с выходным файлом – как с обычным текстовым. Собрав все категории сперва заносит их в файл, а потом поочерёдно ситывает и заносит наши пункты справочника в виде постов. Остаётся только произвести импорт через админку Инструменты -> Импорт, выбираем пункт WordPress и далее наш получившийся файл. После завершения импорта можно взглянуть на результат своих трудов :).

WP-Polls: Добавляем изображение и редирект на статью.

Данный плагин весьма популярен, он позволяет проводить опросы среди посетителей. Его функционал весьма не мал: можно вставить опрос как в запись, так и в сайдбар с помощью виджета или кода, большое количество настроек для отображения опросов на сайте, использование AJAX, можно задать дату начала и окончания опроса, возможность выбора более, чем одного ответа и прочее.

Передо мной же была поставлены задачи:
1) необходимо было добавить поле URL, в который бы заключался текст опроса (например чтобы перейти на ту страницу, где выводятся какие-то пояснения и сам результат опроса),
2) после нажатия кнопки "Ответить" необходимо редиректить пользователя на этот URL,
3) дополнительное поле для добавления рисунка к опросу, т.е. чтобы пользователь мог сразу же на странице настроек выбрать необходимое изображение со своего компьютера, после чего это изображение автоматический должно вставляться перед текстом опроса.

Для начала стоит разобраться как же устроена внутренняя механика wp-polls. Все данные плагин хранит в mysql в таблицах wp_pollsa, wp_pollsip и wp_pollsq. В wp_pollsa хранятся все ответы на наши опросы, в wp_pollsip статистика ответов, а в wp_pollsq сам опрос и его основные данные. Именно последняя таблица нам и нужна. Имена полей интуитивно понятны, поля для url и рисунка мы будем добавлять по параметрам анологичным полю pollq_question. В итоге должна получится картина такая:

Таблица wp_pollsq
Таблица wp_pollsq

В этих полях будут сохраняться наши данные. Следующий шаг - добавление в интерфейс настроек наших полей.

За опции отвечают  2 файла polls-add.php и polls-manager.php. Первый соответственно при добавлении запроса, а второй отвечает за редактирование уже существующих опросов. Начнем с добавления опроса. Добавим сами поля ввода после кода:

наш код:

Теперь необходимо, чтобы введенные нами данные сохранялись, ищем строчку $pollq_question = addslashes(trim($_POST['pollq_question'])); и вставляем после неё

Теперь после заполнения полей рисунка и ссылки, наши данные будут скохраняться в mysql. В данном случае используется стандартная функция для перемещения файлов, которая использует путь и имя выбранного изображения. Если вы хотите, чтобы имена файлов случайно не совпали при загрузке, то стоит вместо имени файла использовать случайный генератор или использовать хэш md5.

Следующее - нужно добавить возможность изменять и просматривать, вводимые нами данные, для этого будем править файл polls-manager.php. Здесь мы добавим поля для изменения, а так же не помешает дополнительно вывести то изображение, которое используется в данном опросе. Действия похожи на предыдущие, соответственно сперва добавляем нужные поля между комментариями и :

и соответственно не забываем про код, который должен извлекать нужные нам данные из базы, находим похожий и подставляем:

а затем добавляем код для сохранения изменённых данных:

Половина дела сделана, теперь осталось выводить эти данные как нам угодно. Для вывода опроса плагин использует шаблоны, которые можно изменять в админке (пункт Poll Templates). Данные подставляются наподобие %<текст>%. Для вывода изображения и урла мы сделаем такую же структура. За вывод опроса уже непосредственно на экран отвечает wp-polls.php. Заходим туда и ищем строчки наподобие:

Первые строчки отвечают за извлечение данных из БД. Последние - за подстановку в шаблон, взятый из админки, вместо тегов уже конкретных значений.
Теперь всё, прописываем в шаблоне как нам угодно выводить эти данные, например изменяем стандартную часть шаблона в "Voting Form Header", чтобы выводился текст опроса и изображение, заключённые в нашу ссылку:

Осталось разобраться только с редиректом, его мы тоже будем прописывать в шаблоне, используя возможности JS. В раздел "Voting Form Footer:" добавляем вместо onclick="poll_vote(%POLL_ID%);" - onclick="poll_vote(%POLL_ID%); justVoted = true;", проверяем эти данные в Result Footer (тот, который Displayed When The User HAS Voted):

Таким образом редиректится будет только тот пользователь, который ещё не проголосовал и именно после того, как он нажмёт кнопку голоса.

Вот и всё, таким образом можно добавить любые данные в плагин, тем самым расширив его функционал.

Ну и приложу изменённые файлы, чтобы можно было разобраться наглядно: файлы. Так же пример работы можно посмотреть на сайте Jlady.ru в левом сайдбаре.

изменяем wordpress и его плагины