Можно ли написать скрипт для ввода данных с помощью Drupal? - PullRequest
3 голосов
/ 27 ноября 2009

Я планирую разместить инвентарь магазина на сайте Drupal, и мне интересно, возможно ли создать скрипт (возможно, в python / php?) Для автоматического ввода данных в Drupal с помощью CCK? Заранее спасибо!

Ответы [ 5 ]

2 голосов
/ 27 ноября 2009

Хенрик и Googletorp уже сделали много хороших предложений.

Несколько дополнительных элементов для разработки вашей стратегии:

  1. Собираетесь ли вы сделать полноценный интернет-магазин (предположительно реализованный с ubercart ) или вы просто настраиваете просмотр узлов, просто чтобы представить инвентарь посетителям сайта?
  2. Сколько продуктов вы собираетесь импортировать?
  3. Как часто вы собираетесь их импортировать?

Решения, которые я бы точно исключил:

  • POST: , как прокомментировал googletorp, это было бы слишком сложно.
  • Внешний скрипт: вы не можете избежать (если вы не любите жить опасно и / или не теряете времени) с использованием drupal API, будь то основные или Ubercart. Данные разбросаны по нескольким таблицам, и существует множество хуков, которые срабатывают при вставке узла. Единственное исключение - если вы сначала сделаете PHP-скрипт, выполняющий начальную загрузку (см. Структуру index.php или xmlrpc.php , чтобы увидеть, как он работает), но в этом Случай, я бы предпочел пойти на модуль в целом: гораздо более элегантный, портативный, ремонтопригодный.

Решения, которые я бы поддержал:

  • Сделайте свой собственный модуль! Как указал googletorp, я привел пример кода о том, как добавить поля CCK в этот ответ .
  • Да, это ... единственный, в кого я верю! ;)

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

  • Чтение непосредственно из БД: Хорошо, только если вам нужно импортировать материал раз и навсегда и , если схема БД приложения-экспортера достаточно проста для создания разумных запросов. Программное обеспечение изменяется и развивается, и схемы БД следуют. Если вам понадобится повторный импорт через два месяца, а схема вашего другого приложения изменилась, вам придется изменить свой код, сменить тесты и т. Д. И т. Д. ...
  • Используйте XML-файлы: Если ваше оригинальное приложение может экспортировать в этом формате, с PHP ' SimpleXML и Xpath + PHP, приведение типов - это действительно очень легко получить данные, которые вы хотите в формате, который вы хотите в течение нескольких минут. Единственным недостатком этого метода является то, что опирается на ... файлы. Таким образом, если вам необходимо периодически выполнять автоматический и автоматический импорт, предвидеть все проблемы, которые могут возникнуть (неправильные разрешения на файловые системы, поврежденные файлы, неправильное кодирование ...), и вводить контрмеры - это довольно сложно. , И наоборот, мне очень нравится этот метод, потому что я знаю, что кто-то будет постоянно контролировать процесс импорта и может вмешаться в случае проблем.
  • Webservice: Это тот, который мне нравится больше всего, если я должен импортировать автоматически и периодически. Самое большое преимущество состоит в том, что два приложения «общаются» друг с другом и раскрывают часть своей бизнес-логики, так что вы можете фактически провести сеанс, который выглядит так: «эй, мне нужны все продукты, цены на которые изменились с прошлой недели "-" вот вы, их должно быть 127, в трех категориях, вы копируете это? " - «О да ... Получилось все громко и ясно: 127 предметов и 3 категории!». Это упростит много ошибок и исключений. Несмотря на то, что Drupal работает как потребитель и поставщик веб-сервисов, вам придется внедрять веб-сервис также и в другом приложении, и это может быть или не быть сложным: это полностью зависит от экспортирующего приложения.

НТН!

2 голосов
/ 27 ноября 2009

Самым быстрым и легким делом было бы сделать что-то с небольшим модулем Drupal, который вы создали для случая, вместо того, чтобы отправлять много сообщений на сервер и тратить ресурсы на загрузку узлов, а что нет.

В любом случае, то, что вам нужно для этого, очень похоже на то, что Mac отвечает здесь :

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

Если вы подключаетесь к БД напрямую, вам нужно иметь тот же тип, что и тот, который вы используете для drupal, или делать это вне API Drupal. Если вы используете для этого друпал API, взгляните на db_set_active ()

2 голосов
/ 27 ноября 2009

Существует несколько модулей Drupal, предназначенных для различных сценариев внешнего (массового) импорта - проверьте этот обзор для опций / сравнений.

Если у вас есть очень специфические потребности, вы можете написать свой собственный модуль, используя существующие и ссылки / подсказки, предоставленные googletorps (+1) для получения инструкций о том, как выполнить фактическую вставку, игнорируя обобщения.

0 голосов
/ 27 ноября 2009

Если ваши исходные данные находятся в MySQL, я бы посмотрел на модуль Migrate для создания контента. Вот выдержка из его страницы проекта:

... обеспечивает гибкую структуру для миграции контента в Drupal из других источников (например, при конвертации веб-сайта из другой CMS в Drupal). Встроенная поддержка для создания основных объектов Drupal, таких как узлы, пользователи, файлы, термины и комментарии, включена в нее и может быть легко расширена для переноса других видов контента. Контент импортируется и откатывается с помощью встроенного веб-интерфейса (модуль Migrate UI) или включенных команд Drush (настоятельно рекомендуется).

0 голосов
/ 27 ноября 2009

CCK или иначе, это просто хорошо сформированный POST-запрос (предположительно), так что, конечно, продолжайте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...