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?


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.


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


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.


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.


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”;)


@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.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.