Jeszcze jeden blog o programowaniu

Radosne twórczości leniwego programisty

Uruchamianie własnego kodu PHP w kontekście Drupala 7 + tworzenie node’ów

leave a comment »

Kilka dni temu pojawiła się potrzeba zaimportowania z przygotowanego pliku kilku wpisów do postaci node’ów. Oprócz oczywistego faktu wczytywania z pliku i modyfikacji treści należało uruchomić własny skrypt w sposób, który pozwalałby m.in. na korzystanie z modułów Drupala – stworzenie i zapisanie node’ów do bazy.

Samo uruchomienie własnego kodu PHP w kontekście Drupala 7 z dostępem do modułów wymaga poniższych linijek. Jak łatwo zauważyć, jest t kod żywcem skopiowany z pliku index.php z katalogu głównego Drupala.

<?php
define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

Kolejnym wyzwaniem jest stworzenie obiektu node’a oraz zapisanie go do bazy Drupala.

$node = new stdClass();
$node->type = 'content_type'; // typ node'a jaki chcemy stworzyć (page, article, ...)
$node->title = $details['name'];
$node->language = LANGUAGE_NONE;
$node->field_country[LANGUAGE_NONE][0]['tid'] = $term->tid;
$node->field_city[LANGUAGE_NONE][0]['value'] = $_details['city'];
$node->field_street[LANGUAGE_NONE][0]['value'] = $details['street'];
$node->field_zip[LANGUAGE_NONE][0]['value'] = $details['zip'];
$node->field_website[LANGUAGE_NONE][0]['url'] = $details['www'];
$node->field_phone[LANGUAGE_NONE][0]['value'] = $details['phone'];
$node->field_email[LANGUAGE_NONE][0]['value'] = $details['email'];

node_object_prepare($node);
module_load_include('inc', 'pathauto');
$node->path['alias'] = preg_replace('/[^a-z0-9_]/i', '-', pathauto_cleanstring($title));
node_save($node);

Zasada jest dość prosta. Tworzymy prosty obiekt w PHP i nadajemy wszystkie wymagane wartości. Nazewnictwo pól w tworzonym obiekcie (np.: field_email)
musi być takie jak pól określanych przy tworzeniu danego typu treści.
Stała LANGUAGE_NONE jest określa dowolny język (wartość ‚und’) i zaleca się zawsze podawanie tej wartości – oczywiście stosownie zmieniając ją, jeśli node ma zostać dodany w określonym języku.
Funkcja node_object_prepare opakowuje obiekt w dodatkowe pola, które są wymagane do poprawnego zapisania node’a do bazy.
Wykorzystując module_load_include – będącą funkcją znajdującą się w jądrze Drupala wczytujemy wymagane moduły – zabezpieczając się przed dostępem do funkcji, których definicji jeszcze nie udało się załadować do pamięci. W naszym wypadku wczytujemy moduł Pathauto aby wygenerować alias dla naszego node’a – ładniej wyglądał będzie adres /nasz-nowy-node niż node/123.

Wykorzystane funkcje:
drupal_bootstrap
node_object_prepare
module_load_include
pathauto_cleanstring
node_save

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s

%d blogerów lubi to: