web-dev-qa-db-ja.com

モジュールは、Drupalが更新ページの1つを表示しているかどうかをどのように確認できますか?

Drupalがデータベーステーブルを更新しているかどうかを確認するためにモジュールは何をすべきですか?更新ページの1つが表示されているときにメッセージを出力しないようにする(または更新中に余分なタスクを実行しないようにする) )?

私が参照しているモジュールは、要求されたすべてのページでいくつかのテストを実行し、drupal_set_message()を使用して結果を出力するカスタムデバッグモジュールです。

2
kiamlaluno

devel.moduleには、非常に包括的なチェックを行うdevel_silent()という関数があります。私はこれをあなた自身のモジュールで複製するかもしれません。

function devel_silent() {
  // isset($_GET['q']) is needed when calling the front page. q is not set.
  // Don't interfere with private files/images.
  return
    function_exists('drupal_is_cli') && drupal_is_cli() ||
    (isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'], 'ApacheBench') !== FALSE) ||
    !empty($_REQUEST['XDEBUG_PROFILE']) ||
    isset($GLOBALS['devel_shutdown']) ||
    strstr($_SERVER['PHP_SELF'], 'update.php') ||
    (isset($_GET['q']) && (
      in_array($_GET['q'], array( 'admin/content/node-settings/rebuild')) ||
      substr($_GET['q'], 0, strlen('system/files')) == 'system/files' ||
      substr($_GET['q'], 0, strlen('batch')) == 'batch' ||
      substr($_GET['q'], 0, strlen('file/ajax')) == 'file/ajax')
    );
}

おそらく、これを「update.php」と$_GET['q']チェックをチェックしている部分だけに少し単純化することができます。

    strstr($_SERVER['PHP_SELF'], 'update.php') ||
    (isset($_GET['q']) && (
      in_array($_GET['q'], array( 'admin/content/node-settings/rebuild')) ||
      substr($_GET['q'], 0, strlen('system/files')) == 'system/files' ||
      substr($_GET['q'], 0, strlen('batch')) == 'batch' ||
      substr($_GET['q'], 0, strlen('file/ajax')) == 'file/ajax')
    );
4
sirkitree

基本的に、パスを確認してください。パスが/ admin/update *などの場合は、コードを実行しないでください。チェックアウト drupal_get_destination()

1
geerlingguy