web-dev-qa-db-ja.com

hook_user_loginおよびhook_user_logoutを使用してコンテンツをページに出力する方法

私はこの投稿に遭遇しました: ユーザーのログイン後にphpコードを実行 と私は受け入れられたソリューションを実装しました。ただし、私の実装では、コンテンツをページに出力しようとしています。これは単に表示されません。私のモジュール名は「alert」で、コードは次のとおりです。

alert.module

<?php

function alert_user_login(&$edit, $account) {
  for ($i=0; $i < 1000; $i++) { 
    echo 'hi<br>';
  }
}

alert.install

<?php

function alert_install() {
  // Set the module weight so it can override other modules.
  db_query("UPDATE {system} SET weight = 99 WHERE name = 'alert'");
}

function alert_uninstall() {
  // Remove the module from the system table
  db_query("DELETE FROM {system} WHERE name = 'alert'");
}

alert.info

; $Id$
name = Alert
description = Present dialogs or perform redirects based on certain events
core = 7.x

これをテーマのtemplate.phpファイルに実装しています。これでうまくいくでしょうか?

2
maxedison

Template.phpでは機能しません。これをモジュールファイルに追加する必要があります。myThemeの代わりに howto で確認してくださいmodulenameになりますモジュール名がfooそれからfoo_user_login

    // @file : foo.module
    function foo_user_login(&$edit, $account) {
      fluenz_user_function($account->uid);
    }
    // and this function name was also different just an FYI
    function fluenz_user_function($uid) {
      for ($i=0; $i < 1000; $i++) { 
        echo 'hi<br>';
      }
    }
4
GoodSp33d

hook_user_login() および hook_user_logout() は、ページのコンテンツを変更するために使用されるとは考えられていません。彼らは、ユーザーがログインまたはログアウトした事実を記録し、最終的に drupal_set_message() でメッセージを設定すると考えられています。あなたが参照している質問の答えがコードの実行について話していることであることに気づくために、print()またはecho()を介して文字列を出力しません。

hook_user_login()を使用して、グローバル変数、または別のフックから取得される静的変数( drupal_static() を参照)を設定できます。

ページのコンテンツを変更するために、他のフックがあります。どちらを使用するかは、何を実現したいかによります。

1
kiamlaluno