web-dev-qa-db-fra.com

Comment puis-je exécuter PHP code sans écrire de module?

J'ai besoin d'attacher un champ à certains bundles. Un PHP snippet fera le travail pour moi, donc je n'ai pas besoin d'un module. Le snippet ci-dessous est ce qui doit être exécuté:

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

puis l'extrait pour ajouter ce champ à l'ensemble:

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

Existe-t-il un moyen d'exécuter PHP directement dans Drupal, sans avoir besoin d'écrire un module, de l'installer, de le faire fonctionner et de le désinstaller?

15

Si vous dites "J'ai besoin d'exécuter du PHP" et "Je n'ai pas besoin d'un module" dans la même pensée, je vous suggère de suivre le mauvais chemin, soit dans l'approche de ce problème spécifique. , ou l'approche de la construction du site en général.

drush scr Vous aidera si c'est dans cette direction que vous voulez vraiment aller, ou vous pouvez écrire un script PHP autonome (en gros, copiez/collez tout via la fonction drupal_bootstrap() appelez depuis index.php, et ajoutez votre code personnalisé après) mais il y a quelques autres choses que vous pouvez regarder:

  • Exportez votre type de contenu (et ses bases et instances de champ) avec le module Fonctionnalités. OMI, vous devriez quand même le faire.
  • Créez un simple module "modifications de site" et incluez des éléments comme celui-ci dans les hooks de mise à jour. Notez que si vous souhaitez le faire, vous devez créer un module vide (sans hook de mise à jour), l'activer sur votre site, puis ajouter votre hook de mise à jour pour obtenir Drupal pour voir la mise à jour .

De nombreux sites sur lesquels j'ai travaillé ont eu une combinaison de ces deux solutions. La configuration devrait principalement aller dans les modules de fonctionnalités exportés, et tout ce qui ne peut pas (êtes-vous vraiment sûr cela ne peut pas?) Peut aller dans un crochet de mise à jour.

6
cweagans

Oui, il y en a, mais compte tenu de votre description, je me demande si cela vous aidera:

  1. Installer le module Devel
  2. Allez dans http: // votresite/devel/php
  3. Entrez votre code et exécutez-le.
18
Miloš Kroulík

Si vous devez exécuter du code une seule fois, vous pouvez le faire sans installer de module, y compris le module Devel.

Écrivez un fichier PHP (par exemple tasks.php ), placez-le là où le fichier cron.php fourni avec = Drupal est, et ajoutez le code suivant.

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

Si vous utilisez déjà Drush pour maintenir/déployer votre site, vous pouvez alors faire un script Drush . De cette façon, il pourrait être exécuté par CLI, et il pourrait recevoir tous les arguments, le rendant réutilisable à de nombreuses reprises.

#!/usr/bin/env drush

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

Vous pouvez également exécuter un script PHP avec drush php-eval (ou simplement drush ev), par exemple:

drush php-eval 'print time();'

Je créerais un script Drush, mais si vous ne pouvez pas installer Drush, ou si vous devez exécuter le code PHP à partir du navigateur, la première méthode fonctionne bien.

12
kiamlaluno

Ajoutez votre extrait de code à un fichier et enregistrez le fichier sous file_name.php dans votre dossier racine du site Drupal. Exécutez ensuite la commande suivante dans un terminal, à partir du dossier racine du site Drupal comme répertoire de travail):

drush scr file_name.php

Cette commande exécutera votre fichier PHP. (Pour avoir une idée de l'exécution, vous pouvez inclure des instructions d'impression dans votre fichier, qui afficheront le texte, les valeurs des variables, etc. sur le terminal où vous exécutez la commande drush.)

Remarque: Comme condition préalable, vous devez avoir drush installé sur votre système.

10
Suresh R

Vous pouvez utiliser Php inline of module Devel mais vous permet d'obtenir une de mes astuces dans drupal pour exécuter mon code personnalisé sans aucun module).

créez d'abord un menu item dans hook_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
}

puis videz le cache (car les éléments de menu mis en cache dans drupal), et mettez tout ce que vous voulez dans my_function et tapez simplement yoursite.com/ytest

J'espère que cela vous aidera dans les projets "dada";)

3
Yusef

L'objectif des modules Drupal est de fournir une logique distincte à certains composants, afin qu'ils puissent être désactivés en cas de problème.

hook_install / hook_update

Dans votre cas qui crée un nouveau champ sur une base unique, le scénario idéal est d'utiliser soit hook_install ou hook_update .

Si vous n'avez pas de module personnalisé (en passant, vous pouvez également utiliser le module de fonction exporté pour cela), créez-en un nouveau uniquement pour les mises à jour (par exemple site_updates). Dans Drupal 7, il vous suffit de créer un dossier avec 3 fichiers: .info, .module et .install et définissez le crochet d'installation ou de mise à jour dans votre .install. L'utilisation du hook d'installation/mise à jour est pratique afin d'avoir des environnements cohérents, en particulier lorsque vous avez plusieurs serveurs Drupal (tels que dev, test et prod), de sorte que la modification peut être invoquée au cours de la prochaine déploiement.

Si vous ne voulez toujours pas créer de module, voici d'autres méthodes.

Exécution unique

Si vous avez seulement besoin d'exécuter certains codes PHP une seule fois, vous pouvez:

  • Activez le module Devel et collez le code dans /devel/php,
  • Utilisez drush CLI (et sa commande eval/ev) pour exécuter PHP code, par exemple.

    drush ev 'field_create_field(["field_name"=>"foo", "type"=>"image"]);'
    drush ev 'print_r(field_info_field("foo"));'
    
  • Utilisation drush scr pour exécuter PHP:

    drush scr my_file.php
    

    my_file.php est votre simple script PHP script avec votre code à exécuter.

Exécution de page spécifique

Pour exécuter du code personnalisé sur certaines pages ou composants:

Exécution de toutes les pages

Pour ajouter et exécuter PHP sur chaque page sans écrire de module, vous pouvez:

  • Utiliser un settings.php fichier pour cela. Il n'est recommandé que pour le code simple tel que la substitution de configuration. Sinon, vous devez utiliser hook_init pour cela dans le cadre de votre module personnalisé.
  • Activez le filtre de texte PHP , puis créez un bloc avec un code personnalisé PHP) et placez le bloc dans la zone de pied de page.
2
kenorb