Jak mogę uruchomić kod PHP bez pisania modułu?

15

Muszę dołączyć pole do niektórych pakietów. Fragment PHP wykona za mnie zadanie, więc nie potrzebuję modułu. Poniżej fragment, który należy wykonać:

$field_name = 'field_custom_image';
// Create the field.
$field = array(
  'field_name' => $field_name,
  'type' => 'image',
);
field_create_field($field);

a następnie fragment, aby dodać to pole do pakietu:

// Create the instance.
$instance = array(
  'field_name' => $field_name,
  'entity_type' => 'node',
  'bundle' => 'article',
  'label' => 'Image',
  'description' => 'An image for the article.',
  'required' => TRUE,
);
field_create_instance($instance);

Czy istnieje sposób na uruchomienie kodu PHP bezpośrednio w Drupal, bez potrzeby pisania modułu, instalowania go, uruchamiania i deinstalowania?

Alireza Tabatabaeian
źródło
Dziękuję wszystkim za zarówno robocze odpowiedzi, jak i dobre wydania na moje pytanie. Głosowałem nad wszystkimi odpowiedziami jako rozwiązaniami mojego problemu, teraz ciężko jest mi wybrać jedną z tych odpowiedzi, ponieważ najlepsze rozwiązanie powoduje wszystkie działania.
Alireza Tabatabaeian
1
Jeśli chcesz pokazać kod, który musisz uruchomić, odpowiedzi byłyby bardziej kompletne.
kiamlaluno
@kiamlaluno Dzięki za poradę, dołączę fragment kodu PHP do mojego pytania.
Alireza Tabatabaeian
1
Blisko powiązane pytania i odpowiedzi: Jak wykonać skrypt php za pomocą drush ?
tanius

Odpowiedzi:

6

Jeśli mówisz „muszę uruchomić PHP” i „nie potrzebuję modułu” w tej samej myśli, sugerowałbym, że podążasz niewłaściwą ścieżką, albo w podejściu do tego konkretnego problemu lub ogólnie podejście do budowy witryny.

drush scrpomoże ci, jeśli to jest kierunek, w którym naprawdę chcesz iść, lub możesz napisać samodzielny skrypt PHP (w zasadzie po prostu skopiuj / wklej wszystko przez drupal_bootstrap()wywołanie z index.php i dodaj swój niestandardowy kod po), ale istnieje kilka innych rzeczy, na które możesz spojrzeć:

  • Wyeksportuj swój typ treści (i jego podstawy i instancje) za pomocą modułu Funkcje. IMO, i tak powinieneś to robić.
  • Utwórz prosty moduł „modyfikacji witryny” i umieść takie rzeczy w zaczepach aktualizacji. Pamiętaj, że jeśli chcesz to zrobić, powinieneś utworzyć pusty moduł (bez haków aktualizacji), włączyć go na swojej stronie, a następnie dodać hak aktualizacji, aby Drupal zobaczył aktualizację.

Wiele witryn, nad którymi pracowałem, zawierało kombinację obu tych rozwiązań. Config powinien głównie przejść do eksportowanych modułów funkcji, a wszystko, co nie może (czy naprawdę jesteś pewien, że nie może?), Może przejść do haka aktualizacji.

cweagans
źródło
Dziękujemy za porady, szczególnie za poinformowanie o użyciu haków aktualizacji. bardzo przydatne
Alireza Tabatabaeian
Czy mógłbyś wspomnieć o niektórych problemach, które mogą być spowodowane uruchomieniem kodów PHP w ten sposób? Mam na myśli dołączanie pól do niektórych typów treści przez uruchamianie skryptów PHP?
Alireza Tabatabaeian
18

Tak, jest, ale biorąc pod uwagę twój opis, zastanawiam się, czy to ci pomoże:

  1. Zainstaluj moduł Devel
  2. Idź do http: // yoursite / devel / php
  3. Wpisz swój kod i uruchom go.
Miloš Kroulík
źródło
1
Moduł Devel zawiera również blok „Execute PHP”, który można umieścić w regionie.
Bez Sssweat
12

Jeśli potrzebujesz uruchomić kod tylko raz, możesz to zrobić bez instalowania żadnego modułu, w tym modułu Devel.

Napisz plik PHP (np. Tasks.php ), umieść go tam, gdzie jest plik cron.php dostarczony z Drupalem, i dodaj następujący kod.

/**
 * Root directory of Drupal installation.
 */
define('DRUPAL_ROOT', getcwd());

include_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
drupal_set_time_limit(240);

// Your code here.

Jeśli już używasz Drusha do utrzymywania / wdrażania swojej witryny, możesz stworzyć skrypt Drush . W ten sposób może być wykonywany przez CLI i może odbierać dowolne argumenty, co czyni go wielokrotnego użytku.

#!/usr/bin/env drush

// Your code here.
// Access the options with drush_get_option(), or any argument with drush_shift().

Możesz także wykonać skrypt PHP za pomocą drush php-eval(lub po prostu drush ev), na przykład:

drush php-eval 'print time();'

Stworzyłbym skrypt Drusha, ale jeśli nie możesz zainstalować Drusha lub musisz wykonać kod PHP z przeglądarki, pierwsza metoda działa dobrze.

kiamlaluno
źródło
10

Dodaj fragment kodu do pliku i zapisz plik jak file_name.phpw folderze głównym witryny Drupal. Następnie uruchom następujące polecenie w terminalu, z folderu głównego witryny Drupal jako katalogu roboczego:

drush scr file_name.php

To polecenie wykona plik PHP. (Aby uzyskać wyobrażenie o wykonaniu, możesz dołączyć do swojego pliku kilka instrukcji print, które wyprowadzą tekst, wartości zmiennych itp. Do terminala, na którym wykonasz polecenie drush.)

Uwaga: warunkiem koniecznym jest drushzainstalowanie systemu.

Suresh R.
źródło
3

Możesz użyć Phpwbudowanego modułu Devel, ale pozwala ci uzyskać jedną z moich sztuczek w Drupal, aby uruchomić mój własny kod bez żadnego modułu.

najpierw utworzyć menu itemwhook_menu

function yourmdoule_menu()
{

    $items['ytest'] = array(
        'title' => 'my debug and devel test tool ',
        'description' => 'create for debug and faster develop',
        'page callback' => 'my_function',
        'type' => MENU_CALLBACK,
        'access callback' => true,
    );
    return $items;
}

function my_function{

/// run every want you want
}

następnie wyczyść pamięć podręczną (ponieważ pozycje menu są buforowane w programie Drupal) i włóż wszystko, co chcesz, my_functioni po prostu wpiszyoursite.com/ytest

Mam nadzieję, że pomoże ci to w projektach „dada”;)

Yusef
źródło
@AlirezaTabatabaeian nie ma za co "dada", będę zadowolony, kiedy zobaczysz tu irańskiego Drupalistę;)
Yusef
2

Celem modułów Drupal jest zapewnienie oddzielnej logiki dla niektórych komponentów, aby można je było wyłączyć, jeśli coś pójdzie nie tak.

hook_install/hook_update

W twoim przypadku, który jest stworzenie nowego pola na podstawie jednorazowej, idealny scenariusz jest użycie albo hook_installalbo hook_update.

Jeśli nie masz niestandardowego modułu (np. Możesz do tego użyć również eksportowanego modułu funkcji), utwórz nowy tylko dla aktualizacji (np site_updates.). W Drupal 7, co potrzebne jest do tworzenia folderu z plikami 3: .info, .modulei .installoraz określić zainstalować lub hak zmiana w twojej .install. Korzystanie z haka instalacyjnego / aktualizacyjnego jest wygodne, aby mieć spójne środowiska, szczególnie gdy masz wiele serwerów Drupal (takich jak dev, test i prod), więc zmianę można wywołać podczas następnego wdrożenia.

Jeśli nadal nie chcesz tworzyć modułu, oto inne metody.

Wykonanie jednorazowe

Jeśli potrzebujesz wykonać tylko jeden kod PHP tylko raz, możesz:

  • Aktywuj moduł Devel i wklej kod na /devel/php,
  • Użyj CLI (i jego / komendy) do wykonania kodu PHP, npdrush evalev

    drush ev 'field_create_field(["field_name"=>"foo", "type"=>"image"]);'
    drush ev 'print_r(field_info_field("foo"));'
  • Służy drush scrdo wykonywania skryptu PHP:

    drush scr my_file.php

    gdzie my_file.phpjest twój zwykły skrypt PHP z kodem do wykonania.

Określone wykonanie strony

Aby wykonać niestandardowy kod na niektórych stronach lub komponentach:

Wykonanie całej strony

Aby dodać i uruchomić kod PHP na każdej stronie bez pisania modułu, możesz:

  • Użyj do tego settings.phppliku. Jest to zalecane tylko w przypadku prostego kodu, takiego jak zastąpienie konfiguracji. W przeciwnym razie powinieneś użyć hook_inittego jako części niestandardowego modułu.
  • Aktywuj filtr tekstowy PHP , a następnie utwórz blok z niestandardowym kodem PHP i umieść blok w obszarze stopki.
kenorb
źródło