モジュールを作成せずにPHPコードを実行するにはどうすればよいですか?


15

いくつかのバンドルにフィールドを添付する必要があります。PHPスニペットは私のために仕事をするので、モジュールは必要ありません。以下のスニペットは実行する必要があるものです:

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

次に、このフィールドをバンドルに追加するスニペット:

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

モジュールを記述し、インストールし、実行し、アンインストールすることなく、DrupalでPHPコードを直接実行する方法はありますか?


作業に対する回答と私の質問に対する優れたエディションの両方に感謝します。私はすべての答えを私の問題の解決策として投票しましたが、今ではすべての作品を引き起こす最良の解決策としてそれらの答えの1つを選択することは私にとって難しい決定です。
アリレザタバタバエ

1
実行する必要があるコードを表示すると、答えはより完全になります。
kiamlaluno

@kiamlalunoアドバイスをありがとう、質問にPHPスニペットを添付します。
アリレザ

1
密接に関連する質問&答え:drushを使用してPHPスクリプトを実行する方法
タニウス

回答:


6

同じ考えで「PHPを実行する必要がある」と「モジュールは必要ない」と言っている場合は、この特定の問題へのアプローチのいずれかで、間違った道を進むことをお勧めします、または一般的なサイト構築のアプローチ。

drush scrそれがあなたが本当に行きたい方向である場合、またはスタンドアロンのPHPスクリプトを書くことができます(基本的にdrupal_bootstrap()はindex.phpからの呼び出しを介してすべてをコピーして貼り付け、後にカスタムコードを追加する)場合に役立ちますが、他にもいくつかありますあなたが見ることができるもの:

  • Featuresモジュールを使用して、コンテンツタイプ(およびそのフィールドベースとインスタンス)をエクスポートします。IMO、とにかくこれを行う必要があります。
  • 単純な「サイト変更」モジュールを作成し、このようなものを更新フックに含めます。これを行う場合は、空のモジュール(更新フックなし)を作成し、サイトで有効にし、更新フックを追加してDrupalに更新を表示させる必要があることに注意してください。

私が取り組んできた多くのサイトは、これらのソリューションの両方を組み合わせていました。Configは、ほとんどの場合、エクスポートされた機能モジュールに移動する必要があり、できない(本当にできないのか)ものは、更新フックに移動できます。


特に更新フックの使用について通知してくれて助言をありがとう。非常に便利
アリレザTabatabaeian

このアプローチをPHPコードを実行することによって引き起こされる可能性のある問題をいくつか教えてください。PHPスクリプトを実行するだけで、一部のコンテンツタイプにフィールドを添付するということですか?
アリレザTabatabaeian


12

コードを1回だけ実行する必要がある場合は、Develモジュールなどのモジュールをインストールせずに実行できます。

PHPファイル(例:tasks.php)を作成し、Drupalに付属のcron.phpファイルがある場所に配置して、次のコードを追加します。

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

サイトの保守/展開にすでにDrushを使用している場合は、Drushスクリプトを作成できます。このようにして、CLIによって実行され、引数を受け取ることができ、多くの場面で再利用可能になります。

#!/usr/bin/env drush

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

たとえば、次のようにdrush php-eval(または単にdrush ev)PHPスクリプトを実行することもできます。

drush php-eval 'print time();'

Drushスクリプトを作成しますが、Drushをインストールできない場合、またはブラウザーからPHPコードを実行する必要がある場合、最初の方法は正常に機能します。


10

コードスニペットをファイルに追加file_name.phpし、Drupalサイトのルートフォルダーにファイルを保存します。次に、ターミナルで、Drupalサイトのルートフォルダー内から作業ディレクトリとして次のコマンドを実行します。

drush scr file_name.php

このコマンドは、PHPファイルを実行します。(実行のアイデアを得るために、ファイルにいくつかのprintステートメントを含めることができます。これにより、drushコマンドを実行する端末にテキスト、変数値などが出力されます。)

注:前提条件として、drushシステムにインストールする必要があります。


3

あなたは使用することができるPhpのインラインのDevelモジュールが、任意のモジュールなしで私のカスタムコードを実行するにはあなたのDrupalの私のトリックの1を取得することができます。

最初に作成するmenu itemには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
}

次にキャッシュをクリアし(メニュー項目がdrupalにキャッシュされるため)、必要なものをすべてmy_function入力して入力するだけですyoursite.com/ytest

私はそれがプロジェクト「ダダ」であなたを助けることを願っています;)


@AlirezaTabatabaeian「ダダ」を歓迎します。ここでイランのドルパリストを見るとうれしいです;)
ユセフ

2

Drupalモジュールの目標は、特定のコンポーネントに個別のロジックを提供することであるため、何か問題が発生した場合は無効にできます。

hook_install/hook_update

一度だけ新しいフィールドを作成する場合、理想的なシナリオはまたはのいずれhook_installかを使用することhook_updateです。

カスタムモジュールがない場合(そのためにエクスポートされた機能モジュールを使用することもできます)、更新のためだけに新しいモジュールを作成します(例:)site_updates。Drupal 7で必要なのは、3つのファイルでフォルダーを作成することです:.info.moduleおよび.installでインストールまたは更新フックを定義します.install。特に、Drupalサーバー(dev、test、prodなど)が複数ある場合、一貫した環境を維持するには、インストール/更新フックを使用すると便利です。そのため、変更は次のデプロイメント時に呼び出すことができます。

それでもモジュールを作成したくない場合は、他の方法があります。

ワンタイム実行

特定のPHPコードを1回だけ実行する必要がある場合は、次のことができます。

  • Develモジュールをアクティブにし、コードを/devel/phpに貼り付けます
  • 使用CLI(およびその/のコマンド)を実行するPHPコード、例えばdrush evalev

    drush ev 'field_create_field(["field_name"=>"foo", "type"=>"image"]);'
    drush ev 'print_r(field_info_field("foo"));'
  • drush scrPHPスクリプトの実行に使用:

    drush scr my_file.php

    my_file.php実行するコードを含む単純なPHPスクリプトはどこにありますか。

特定のページの実行

特定のページまたはコンポーネントでカスタムコードを実行するには:

すべてのページの実行

モジュールを作成せずにすべてのページでPHPコードを追加して実行するには、次のことができます。

  • settings.phpそのためにファイルを使用します。構成のオーバーライドなどの単純なコードにのみお勧めします。それ以外の場合hook_initは、カスタムモジュールの一部として使用する必要があります。
  • アクティブPHPのテキストフィルタは、それにカスタムPHPコードを使用してブロックを作成し、フッタ領域にブロックを配置します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.