Come posso eseguire il codice PHP senza scrivere un modulo?


15

Devo collegare un campo ad alcuni gruppi. Uno snippet PHP farà il lavoro per me, quindi non ho bisogno di un modulo. Lo snippet di seguito è ciò che deve essere eseguito:

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

e quindi lo snippet per aggiungere questo campo al bundle:

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

C'è un modo per eseguire il codice PHP direttamente in Drupal, senza la necessità di scrivere un modulo, installarlo, farlo funzionare e disinstallarlo?


Grazie a tutti per le risposte funzionanti e le buone edizioni fatte alla mia domanda. Ho votato tutte le risposte come soluzioni al mio problema, ora è una decisione difficile per me selezionare una di quelle risposte in quanto la soluzione migliore fa sì che tutto funzioni.
Alireza Tabatabaeian,

1
Se dovessi mostrare il codice che devi eseguire, le risposte sarebbero più complete.
kiamlaluno

@kiamlaluno Grazie per il consiglio, allego la mia domanda di frammento di PHP.
Alireza Tabatabaeian,

1
Domande e risposte strettamente correlate: come eseguire script php usando drush ?
tanius,

Risposte:


6

Se stai dicendo "Ho bisogno di eseguire un po 'di PHP" e "Non ho bisogno di un modulo" nello stesso pensiero, suggerirei che stai seguendo la strada sbagliata, sia nell'approccio a questo specifico problema o l'approccio alla costruzione del sito in generale.

drush scrti aiuterà se questa è la direzione in cui vuoi davvero andare, o potresti scrivere uno script PHP autonomo (in pratica basta copiare / incollare tutto attraverso la drupal_bootstrap()chiamata da index.php e aggiungere il tuo codice personalizzato dopo) ma ci sono un altro paio cose che potresti guardare:

  • Esporta il tuo tipo di contenuto (e le sue basi di campo e le istanze) con il modulo Caratteristiche. IMO, dovresti farlo comunque.
  • Crea un semplice modulo "modifiche del sito" e includi cose come queste negli hook di aggiornamento. Nota che se vuoi farlo, dovresti creare un modulo vuoto (senza hook di aggiornamento), abilitarlo sul tuo sito e quindi aggiungere il tuo hook di aggiornamento per far vedere l'aggiornamento a Drupal.

Molti siti su cui ho lavorato hanno avuto una combinazione di entrambe queste soluzioni. Config dovrebbe principalmente andare nei moduli delle funzionalità esportati e tutto ciò che non può (sei davvero sicuro di non poterlo fare) può andare in un hook di aggiornamento.


Grazie per i consigli, in particolare per l'informazione sull'uso degli hook di aggiornamento. molto utile
Alireza Tabatabaeian,

Potresti per favore menzionare alcuni problemi che possono essere causati dall'esecuzione di codici PHP con questo approccio? Intendo collegare campi ad alcuni tipi di contenuto semplicemente eseguendo script PHP?
Alireza Tabatabaeian,


12

Se è necessario eseguire il codice una sola volta, è possibile farlo senza installare alcun modulo, incluso il modulo Devel.

Scrivi un file PHP (es. Task.php ), mettilo dove si trova il file cron.php fornito con Drupal e aggiungi il seguente codice.

/**
 * 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.

Se stai già utilizzando Drush per mantenere / distribuire il tuo sito, puoi creare uno script Drush . In questo modo, potrebbe essere eseguito dalla CLI e potrebbe ricevere qualsiasi argomento, rendendolo riutilizzabile per molte occasioni.

#!/usr/bin/env drush

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

Puoi anche eseguire uno script PHP con drush php-eval(o solo drush ev), ad esempio:

drush php-eval 'print time();'

Vorrei creare uno script Drush, ma se non è possibile installare Drush o è necessario eseguire il codice PHP dal browser, il primo metodo funziona correttamente.


10

Aggiungi lo snippet di codice a un file e salva il file come file_name.phpnella cartella principale del sito Drupal. Quindi eseguire il comando seguente in un terminale, dalla cartella principale del sito Drupal come directory di lavoro:

drush scr file_name.php

Questo comando eseguirà il tuo file PHP. (Per avere un'idea dell'esecuzione, è possibile includere alcune istruzioni di stampa nel file, che invierà il testo, i valori delle variabili ecc. Al terminale in cui si esegue il comando drush.)

Nota: come prerequisito, è necessario aver drushinstallato sul sistema.


3

Puoi usare il modulo DevelopPhp inline, ma ti permette di darti uno dei miei trucchi in drupal per eseguire il mio codice personalizzato senza alcun modulo.

prima creare un menu iteminhook_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
}

quindi svuota la cache (perché le voci di menu sono memorizzate nella cache di drupal) e inserisci tutto quello che vuoi my_functione digitayoursite.com/ytest

Spero che ti possa aiutare nei progetti "dada";)


@AlirezaTabatabaeian sei il benvenuto "dada", sarò felice quando vedrai il Drupalist iraniano qui;;)
Yusef

2

L'obiettivo dei moduli Drupal è fornire una logica separata a determinati componenti, in modo che possano essere disabilitati se qualcosa va storto.

hook_install/hook_update

Nel tuo caso che sta creando un nuovo campo su una sola volta, lo scenario ideale è usare uno hook_installo hook_update.

Se non si dispone di un modulo personalizzato (tra l'altro, è possibile utilizzare anche il modulo funzionalità esportato), crearne uno nuovo solo per gli aggiornamenti (ad es site_updates.). In Drupal 7, tutto ciò che serve è quello di creare la cartella con i file 3: .info, .modulee .installe definire installare o gancio aggiornamento nel vostro .install. L'uso del hook di installazione / aggiornamento è conveniente per avere ambienti coerenti, specialmente quando si hanno più server Drupal (come dev, test e prod), quindi la modifica può essere invocata durante la distribuzione successiva.

Se ancora non vuoi creare un modulo, ecco altri metodi.

Esecuzione unica

Se devi eseguire solo un certo codice PHP solo una volta, puoi:

  • Attiva il modulo Devel e incolla il codice in /devel/php,
  • Utilizzare CLI (e il suo comando / ) per eseguire il codice PHP, ad esdrush evalev

    drush ev 'field_create_field(["field_name"=>"foo", "type"=>"image"]);'
    drush ev 'print_r(field_info_field("foo"));'
  • Utilizzare drush scrper eseguire lo script PHP:

    drush scr my_file.php

    dov'è il my_file.phptuo semplice script PHP con il tuo codice da eseguire.

Esecuzione di pagine specifiche

Per eseguire codice personalizzato su determinate pagine o componenti:

Esecuzione di tutte le pagine

Per aggiungere ed eseguire il codice PHP su ogni pagina senza scrivere un modulo, puoi:

  • Usa un settings.phpfile per quello. È consigliato solo per codice semplice come override di configurazione. Altrimenti dovresti usarlo hook_initcome parte del tuo modulo personalizzato.
  • Attiva il filtro di testo PHP , quindi crea un blocco con codice PHP personalizzato e posiziona il blocco nella zona del piè di pagina.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.