Являеться ли текущий пользователь автором ноды

Главные вкладки

Аватар пользователя dm66 dm66 24 декабря 2008 в 22:42

Есть самописный модуль, в нем функция, в которой присутствует переменная равная NID (номеру текущей ноды), есть UID пользователя, задача заключаеться в том, чтобы проверить, являеться ли текущий пользователь автором просматриваемой ноды. Я пока только так придумал:
<?php
function myfunction($cid, $type) {
global $user;
if ($type == 'node') {
$node = db_fetch_object(db_query(db_rewrite_sql('SELECT n.uid FROM {node} n WHERE n.nid = %d'), $cid));
}
if ($user->uid == $node->uid) {
тра-ля-ля
}
}
?>

Тоесть мы из базы запросом выдергиваем UID автора ноды и сравниваем его с UID пользователя.

На сколько оптимально такое решение? Или можно данную задачу реализовать другим образом?

Комментарии

Аватар пользователя neochief neochief 24 декабря 2008 в 23:11
function myfunction($cid, $type) {
  global $user;
  if ($type == 'node') {
    $node = node_load($cid);
    if ($user->uid == $node->uid) {
      тра-ля-ля
    }
  }
}

Обосную. node_load() использует static кеширование. Если кто-то уже подгрузил ноду до вас (например, если это страница ноды), то функция не будет лезть в базу второй раз, а дернет объект из памяти. Я рекомендую использовать сугубо user_load (c 6.x) и node_load для вот таких подгрузок. Это экономит если не вам, то тем, кто будет грузить после вас.

Аватар пользователя dm66 dm66 24 декабря 2008 в 23:44

Большое спасибо за подробный ответ.

Сам думал по началу использовать node_load, но подумал, что это будет более ресурсоемко. Еще раз спасибо за разъяснения.

UPD: А на сколько будет оправданно использование node_load, если результат функции будет показан не только в самой ноде, при её просмотре, но и в тизере тоже?

Тоесть получаеться, что при выводе списка нод, на каждую ноду из списка будет вызываться node_load, хотя отображаться будут только тизеры. И на сколько я понимаю, при таком раскладе node_load для каждой ноды из списка будет лезть в базу а не брать данные из кеша.

Аватар пользователя restyler restyler 24 декабря 2008 в 23:50

"dm66" wrote:
Тоесть получаеться, что при выводе списка нод, на каждую ноду из списка будет вызываться node_load, хотя отображаться будут только тизеры.

если есть вывод тизеров уже, то еще один node_load по этим же нодам базу дергать не будет