web-dev-qa-db-ja.com

現在のノードの作成者が現在ログインしているユーザーかどうかを確認するにはどうすればよいですか?

現在ログインしているユーザーが現在自分のノード(作成者のノード)を表示しているか、他のユーザーのノードを表示しているかの条件に基づいてルールを実行しようとしています。私が使用しているルールイベント/トリガーは 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()関数を使用する必要がありますか?もしそうなら?

1
FrontEnd

なんとかうまくやった!以下は、現在のユーザーが作成者であるコンテンツを表示しているかどうかを確認するためのコードです。

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;
}

これが誰かに役立つことを願っています。

2
FrontEnd

これを実現するためにPHPコードを記述する必要はありません。

  1. 新しいルールを作成する
  2. イベントに反応:コンテンツが表示されますNodeセクションの下)
  3. 追加条件:データ比較データセクションの下)。継続する。
  4. 比較するデータ、データセレクター:node:author。継続する。
  5. データ値、データセレクター:site:current-user。保存する。

更新:

あなたの最新の編集によると、私の上の答えは無効になります。コメントですでに書いたので、$nodeオブジェクトはスクリプトに読み込まれますが、$userオブジェクトではありません。現在ログインしているユーザーをロードして、以下を追加できます。

global $user;

コードブロックの始めに。私はUIでPHP=を使用したことがないので、使用できるトークンがあるかどうかわかりません。UIを見てこの情報を確認し、使用できる場合は、あなたのコードでそれらを。

1
Елин Й.

少し違う方法があります。これは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を取得して、さらに機能を使用できるようになりました。

0
10kinds