Como posso executar o código PHP sem escrever um módulo?


15

Preciso anexar um campo a alguns pacotes. Um snippet PHP fará o trabalho para mim, portanto, não preciso de um módulo. O snippet abaixo é o que deve ser executado:

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

e, em seguida, o snippet para adicionar esse campo ao pacote:

// 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 uma maneira de executar o código PHP diretamente no Drupal, sem a necessidade de escrever um módulo, instalá-lo, executá-lo e desinstalá-lo?


Obrigado a todos pelas respostas e boas edições feitas na minha pergunta. Votei todas as respostas como soluções para o meu problema, agora é uma decisão difícil para mim selecionar uma dessas respostas como a melhor solução que causa todos os trabalhos.
Alireza Tabatabaeian

11
Se você mostrar o código que precisa executar, as respostas serão mais completas.
kiamlaluno

@kiamlaluno Obrigado pelo conselho, anexarei o trecho de código PHP à minha pergunta.
Alireza Tabatabaeian

11
Perguntas e respostas estreitamente relacionadas: Como executar o script php usando drush ?
tanius

Respostas:


6

Se você está dizendo "Eu preciso executar um pouco de PHP" e "Eu não preciso de um módulo" no mesmo pensamento, sugiro que você esteja seguindo o caminho errado, seja na abordagem desse problema específico ou a abordagem para criar o site em geral.

drush scrirá ajudá-lo se essa for a direção que você realmente deseja seguir, ou se você puder escrever um script PHP independente (basicamente apenas copie / cole tudo através da drupal_bootstrap()chamada em index.php e adicione seu código personalizado depois), mas existem outras coisas que você pode olhar:

  • Exporte seu tipo de conteúdo (e suas bases e instâncias de campo) com o módulo Recursos. IMO, você deve fazer isso de qualquer maneira.
  • Crie um módulo "modificações do site" simples e inclua coisas como essa nos ganchos de atualização. Observe que, se você quiser fazer isso, crie um módulo vazio (sem ganchos de atualização), habilite-o no seu site e adicione seu gancho de atualização para que o Drupal veja a atualização.

Muitos sites em que trabalhei tiveram uma combinação dessas duas soluções. O Config deve entrar principalmente nos módulos de Recursos exportados, e qualquer coisa que não possa (você tem certeza de que não pode?) Pode entrar em um gancho de atualização.


Obrigado por avisar, especialmente por informar sobre o uso de ganchos de atualização. muito útil
Alireza Tabatabaeian

Você poderia mencionar alguns problemas que podem ser causados ​​pela execução de códigos PHP nessa abordagem? Quero dizer, anexar campos a alguns tipos de conteúdo apenas executando scripts PHP?
Alireza Tabatabaeian


12

Se você precisar executar o código apenas uma vez, poderá fazê-lo sem instalar nenhum módulo, incluindo o módulo Devel.

Escreva um arquivo PHP (por exemplo, tasks.php ), coloque-o onde está o arquivo cron.php que acompanha o Drupal e adicione o seguinte 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.

Se você já estiver usando o Drush para manter / implantar seu site, poderá criar um script Drush . Dessa maneira, ele poderia ser executado pela CLI e receber quaisquer argumentos, tornando-o reutilizável por várias ocasiões.

#!/usr/bin/env drush

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

Você também pode executar um script PHP com drush php-eval(ou apenas drush ev), por exemplo:

drush php-eval 'print time();'

Eu criaria um script Drush, mas se você não puder instalar o Drush, ou precisar executar o código PHP no navegador, o primeiro método funcionará bem.


10

Adicione seu snippet de código a um arquivo e salve-o como file_name.phpna pasta raiz do site Drupal. Em seguida, execute o seguinte comando em um terminal, de dentro da pasta raiz do site Drupal como seu diretório de trabalho:

drush scr file_name.php

Este comando executará seu arquivo PHP. (Para ter uma idéia da execução, você pode incluir algumas instruções de impressão em seu arquivo, que produzirão o texto, os valores das variáveis ​​etc. para o terminal onde você executa o comando drush.)

Nota: Como pré-requisito, você precisa ter drushinstalado no seu sistema.


3

Você pode usar o módulo Devel emPhp linha , mas vamos lhe dar um dos meus truques drupal para executar meu código personalizado sem nenhum módulo.

primeiro criar uma menu itememhook_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
}

limpe o cache (porque os itens de menu são armazenados em cache no drupal) e coloque tudo o que deseja my_functione digiteyoursite.com/ytest

Espero que ajude você nos projetos "dada";)


@AlirezaTabatabaeian você é bem-vindo "dada", ficarei feliz em ver o drupalista iraniano aqui;)
Yusef

2

O objetivo dos módulos Drupal é fornecer lógica separada para determinados componentes, para que possam ser desativados se algo der errado.

hook_install/hook_update

No seu caso, que está criando um novo campo de uma só vez, o cenário ideal é usar um hook_installou outro hook_update.

Se você não possui um módulo personalizado (btw. Também pode usar o módulo de recurso exportado para isso), crie um novo apenas para atualizações (por exemplo site_updates). No Drupal 7, tudo que você precisa é criar pasta com 3 arquivos: .info, .modulee .installe definir instalar ou atualizar o gancho na sua .install. Usar o gancho de instalação / atualização é conveniente para ter ambientes consistentes, especialmente quando você possui vários servidores Drupal (como dev, test e prod), para que a alteração possa ser chamada durante a próxima implantação.

Se você ainda não deseja criar o módulo, aqui estão outros métodos.

Execução única

Se você precisar executar apenas um certo código PHP apenas uma vez, poderá:

  • Ative o módulo Devel e cole o código em /devel/php,
  • Use CLI (e seu / comando) para executar o código PHP, por exemplodrush evalev

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

    drush scr my_file.php

    Onde my_file.phpestá o seu script PHP simples com o seu código para executar.

Execução de página específica

Para executar código personalizado em determinadas páginas ou componentes:

Execução de todas as páginas

Para adicionar e executar o código PHP em todas as páginas sem escrever um módulo, você pode:

  • Use um settings.phparquivo para isso. É recomendado apenas para código simples, como substituição de configuração. Caso contrário, você deve usá hook_init-lo como parte do seu módulo personalizado.
  • Ative o filtro de texto PHP , crie um bloco com o código PHP personalizado e coloque o bloco na região do rodapé.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.