¿Cómo puedo ejecutar código PHP sin escribir un módulo?

15

Necesito adjuntar un campo a algunos paquetes. Un fragmento de PHP hará el trabajo por mí, por lo que no necesito un módulo. El siguiente fragmento es lo que debe ejecutarse:

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

y luego el fragmento para agregar este campo al paquete:

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

¿Hay alguna manera de ejecutar código PHP directamente en Drupal, sin la necesidad de escribir un módulo, instalarlo, ejecutarlo y desinstalarlo?

Alireza Tabatabaeian
fuente
Gracias a todos por las respuestas y buenas ediciones realizadas a mi pregunta. He votado todas las respuestas como soluciones a mi problema, ahora es una decisión difícil para mí seleccionar una de esas respuestas como la mejor solución porque todo funciona.
Alireza Tabatabaeian
1
Si tuviera que mostrar el código que necesita ejecutar, las respuestas serían más completas.
kiamlaluno
@kiamlaluno Gracias por el consejo, adjuntaré el fragmento de PHP a mi pregunta.
Alireza Tabatabaeian
1
Preguntas y respuestas estrechamente relacionadas: ¿Cómo ejecutar el script php usando drush ?
tanius

Respuestas:

6

Si dice "Necesito ejecutar PHP" y "No necesito un módulo" en el mismo pensamiento, le sugiero que siga el camino equivocado, ya sea en el enfoque de este problema específico , o el enfoque para construir el sitio en general.

drush scrlo ayudará si esa es la dirección en la que realmente quiere ir, o podría escribir un script PHP independiente (básicamente solo copie / pegue todo a través de la drupal_bootstrap()llamada desde index.php y agregue su código personalizado después) pero hay un par de otros cosas que podrías mirar:

  • Exporte su tipo de contenido (y sus bases de campo e instancias) con el módulo Características. OMI, deberías estar haciendo esto de todos modos.
  • Cree un módulo simple de "modificaciones del sitio" e incluya cosas como esta en los enlaces de actualización. Tenga en cuenta que si desea hacer esto, debe crear un módulo vacío (sin enlaces de actualización), habilitarlo en su sitio y luego agregar su enlace de actualización para que Drupal vea la actualización.

Muchos sitios en los que he trabajado han tenido una combinación de ambas soluciones. La configuración debería ir principalmente a los módulos de características exportados, y cualquier cosa que no pueda (¿está realmente seguro de que no puede?) Puede ir a un enlace de actualización.

cweagans
fuente
Gracias por los consejos, especialmente por informar sobre el uso de enlaces de actualización. muy útil
Alireza Tabatabaeian
¿Podría mencionar algunos problemas que pueden ser causados ​​por ejecutar códigos PHP con este enfoque? Me refiero a adjuntar campos a algunos tipos de contenido simplemente ejecutando scripts PHP?
Alireza Tabatabaeian
18

Sí, la hay, pero dada tu descripción, me pregunto si te ayudará:

  1. Instalar módulo Devel
  2. Vaya a http: // yoursite / devel / php
  3. Ingrese su código y ejecútelo.
Miloš Kroulík
fuente
1
El módulo Devel también viene con un bloque "Ejecutar PHP", que puede colocar en una región.
No Sssweat
12

Si necesita ejecutar código solo una vez, puede hacerlo sin instalar ningún módulo, incluido el módulo Devel.

Escriba un archivo PHP (por ejemplo, task.php ), póngalo donde está el archivo cron.php que viene con Drupal y agregue el siguiente código.

/**
 * 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 ya está usando Drush para mantener / implementar su sitio, entonces podría hacer un script Drush . De esta manera, podría ser ejecutado por CLI, y podría recibir cualquier argumento, haciéndolo reutilizable para muchas ocasiones.

#!/usr/bin/env drush

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

También puede ejecutar un script PHP con drush php-eval(o simplemente drush ev), por ejemplo:

drush php-eval 'print time();'

Crearía un script Drush, pero si no puede instalar Drush, o si necesita ejecutar código PHP desde el navegador, el primer método funciona bien.

kiamlaluno
fuente
10

Agregue su fragmento de código a un archivo y guárdelo como file_name.phpen la carpeta raíz del sitio Drupal. Luego ejecute el siguiente comando en una terminal, desde la carpeta raíz del sitio Drupal como su directorio de trabajo:

drush scr file_name.php

Este comando ejecutará su archivo PHP. (Para tener una idea de la ejecución, puede incluir algunas declaraciones de impresión en su archivo, que generarán el texto, los valores variables, etc. en el terminal donde ejecuta el comando drush).

Nota: Como requisito previo, debe tener drushinstalado en su sistema.

Suresh R
fuente
3

Puede usar el módulo enPhp línea de Devel, pero le permite obtener uno de mis trucos en drupal para ejecutar mi código personalizado sin ningún módulo.

primero crea un menu itemenhook_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
}

luego borre la memoria caché (porque los elementos del menú se almacenaron en caché en drupal), coloque todo lo que desee my_functiony simplemente escribayoursite.com/ytest

Espero que te ayude en proyectos "dada";)

Yusef
fuente
@AlirezaTabatabaeian de nada "papá", me alegraré cuando vea a Drupalist iraní aquí;)
Yusef
2

El objetivo de los módulos de Drupal es proporcionar una lógica separada a ciertos componentes, de modo que puedan desactivarse si algo sale mal.

hook_install/ /hook_update

En su caso, que está creando un nuevo campo de una sola vez, el escenario ideal es usar hook_installo hook_update.

Si no tiene un módulo personalizado (por cierto, también puede usar el módulo de características exportado para eso), cree uno nuevo solo para actualizaciones (por ejemplo site_updates). En Drupal 7, todo lo que necesita es crear carpeta con 3 archivos: .info, .moduley .instally definir la instalación o actualización de gancho en su .install. Usar el enlace de instalación / actualización es conveniente para tener entornos consistentes, especialmente cuando tiene múltiples servidores Drupal (como dev, test y prod), por lo que el cambio puede ser invocado durante la próxima implementación.

Si aún no desea crear un módulo, aquí hay otros métodos.

Ejecución de una sola vez

Si solo necesita ejecutar cierto código PHP solo una vez, puede:

  • Active el módulo Devel y pegue el código en /devel/php,
  • Use CLI (y su comando / ) para ejecutar código PHP, por ejemplodrush evalev

    drush ev 'field_create_field(["field_name"=>"foo", "type"=>"image"]);'
    drush ev 'print_r(field_info_field("foo"));'
  • Use drush scrpara ejecutar script PHP:

    drush scr my_file.php

    ¿Dónde my_file.phpestá su script PHP simple con su código para ejecutar?

Ejecución de página específica

Para ejecutar código personalizado en ciertas páginas o componentes:

Toda la ejecución de la página

Para agregar y ejecutar código PHP en cada página sin escribir un módulo, puede:

  • Use un settings.phparchivo para eso. Solo se recomienda para código simple, como anulación de configuración. De lo contrario, debe usarlo hook_initcomo parte de su módulo personalizado.
  • Active el filtro de texto PHP , luego cree un bloque con código PHP personalizado y coloque el bloque en la región del pie de página.
kenorb
fuente