現在ログインしているユーザーが現在自分のノード(作成者のノード)を表示しているか、他のユーザーのノードを表示しているかの条件に基づいてルールを実行しようとしています。私が使用しているルールイベント/トリガーは Statuses モジュールの「ユーザーがステータスを保存する」です。次に、ルール条件「Execute Custom PHP code」を使用し、現在のノードのuid(ノードの作成者のuid)が現在のユーザーのuidと等しいかどうかを確認するifステートメントを設定しました。
_if ($node->uid == $user->uid) {
return TRUE;
}
else {
return FALSE;
}
_
_$node
_変数と_$user
_変数の両方が認識されないため、これにより「オブジェクト以外のプロパティを取得しようとしています」というエラーが発生します。なぜそうなのかよくわかりません。これらの変数を使用する前に、node_load()
関数とuser_load()
関数を使用する必要がありますか?もしそうなら?
なんとかうまくやった!以下は、現在のユーザーが作成者であるコンテンツを表示しているかどうかを確認するためのコードです。
global $user;
if (arg(0) == 'node' && is_numeric(arg(1))) {
// Get the nid
$nid = arg(1);
// Load the node if you need to
$node = node_load($nid);
}
if($node->uid == $user->uid){
return TRUE;
} else {
return FALSE;
}
これが誰かに役立つことを願っています。
これを実現するためにPHPコードを記述する必要はありません。
あなたの最新の編集によると、私の上の答えは無効になります。コメントですでに書いたので、$node
オブジェクトはスクリプトに読み込まれますが、$user
オブジェクトではありません。現在ログインしているユーザーをロードして、以下を追加できます。
global $user;
コードブロックの始めに。私はUIでPHP=を使用したことがないので、使用できるトークンがあるかどうかわかりません。UIを見てこの情報を確認し、使用できる場合は、あなたのコードでそれらを。
少し違う方法があります。これはFrontEndのメソッドに非常に似ていますが、私はarg()からできるだけ離れるようにしています(良くも悪くも)。これはmenu_get_object()を使用するため、D8では機能しませんが、私がしていることについてはまだD8に移動していません。
彼女が来た:
global $user;
// Logged in user
$uid = $user->uid;
$node = menu_get_object();
if (!empty($node)) {
// Node creator ID
$nuid = $node->uid;
}
if ($uid==$nuid) {
$creator = TRUE;
} else {
$creator = FALSE;
}
次に、コンテンツクリエーターに特定の情報を表示する必要がある場合は、使用するだけです。
if ($creator) {
// Hello Creator
}
これで、ログインしたユーザーとコンテンツ作成者のuidを取得して、さらに機能を使用できるようになりました。