Дополнение node полями профиля

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

Аватар пользователя beerman beerman 23 августа 2008 в 15:47

В профиле имеются дополнительные поля. В частности название газеты и ФИО. У каждого пользователя-редактора они свои.
При сохранении нового материала необходимо добавлять в body материала ФИО юзера и имя газеты.

какими hook-ами это можно сделать?

Комментарии

Аватар пользователя beerman beerman 23 августа 2008 в 16:46

тогда скорее мне нужен
<?php if ($op == 'submit') { ?>
перед записью чтобы добавлял.
вопрос: как получить <?php print_r($node); ?>
?

Аватар пользователя beerman beerman 23 августа 2008 в 17:12

<?php
function hook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch ($op) {
case 'submit':
drupal_set_message(t('Taram Param'));
break;
}

}
?>
никакого эффекта.
или вместо hook надо что-то другое писать?

Аватар пользователя beerman beerman 24 августа 2008 в 9:57

скорее не название модуля, а тип материала. в моем случае типа материала - news.
делаю так:
<?php
function news_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch ($op) {
case 'submit':
if ($node->type == 'news' ) {
drupal_set_message('NEWS NODE!');
}
break;
}
}
?>
и нифига не выходит. ничего не пишет в сообщении.
все выходные на смарку. где грабли, друзья?

Аватар пользователя beerman beerman 24 августа 2008 в 10:48

решено.

Я все это пытался сделать в template.php
А надо в модуле, йоптыть...

Теперь образовалась новая проблема:
<?php
function newshook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch ($op) {
case 'submit':
if ($node->type == 'news' ) {
drupal_set_message('NEWS NODE!');
$node->body .= 'Подпись редактора!';
}
break;
case 'view':
if ($node->type == 'news' ) {
$node->content['body']['#value'] .= '


Foo!';
}
break;
case 'view':
break;
}
}
?>
case 'view' прекрасно отрабатывает, но мне надо именно в тело материала добавить подпись, что я пытаюсь сдtлать в case 'submit', чтобы при смене места работы редактора, подпись в материалах, написанных на старом месте работы не менялась.
Проблема в том, что в том виде, котором я пытаюсь прилепить данные к телу, обрезаются html-теги. Т.е. и <p>, и <hr />, и любые другие теги обрезаются.
Подскажите, в чем моя ошибка?
Аватар пользователя zhylik zhylik 24 августа 2008 в 16:07
<?php
function newshook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  switch ($op) {
    case 'alter':
      if ($node->type == 'news' ) {
        $node->body .= '<b>толстый шрифт</b>';
      }
      break;
  }
}
?>

оно?

Аватар пользователя zhylik zhylik 24 августа 2008 в 16:29

ой не то. Вот вариант. Теперь, если нужно, осталось убрать подпись из ноды, когда она открывается в форме для редактирования.

function newshook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  switch ($op) {
    case 'submit':
      if ($node->type == 'news' ) {
        $node->body .= '[lastplace]Московская типография[/lastplace]';
       }
       break;

    case 'view':
      if ($node->type == 'news' ) {
        $pattern = '/(\[lastplace\](.*?)\[\/lastplace\])/is';
        $replace = '<br><b>\\2</b>';
        $node->content['body']['#value'] = preg_replace($pattern, $replace, $node->content['body']['#value']);
      }
      break;
  }
}

Аватар пользователя beerman beerman 24 августа 2008 в 18:10

окончательно выглядит так:
<?php
function newshook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
global $user;
switch ($op) {
case 'submit':
if ($node->type == 'news' ) {
drupal_set_message('NEWS NODE!');
$node->format = 3;
$sql = 'SELECT u.value FROM {profile_values} u WHERE u.uid = %d ORDER BY u.fid DESC';
$result = db_query($sql,$user->uid);
$usernick = db_fetch_array($result);
$userjobs = db_fetch_array($result);
$node->body .= '[lastplace]'.$usernick['value'].'
'.$userjobs['value'].'[/lastplace]';
}
break;
case 'view':
if ($node->type == 'news' ) {
$pattern = '/(\[lastplace\](.*?)\[\/lastplace\])/is';
$replace = '
\\2';
$node->content['body']['#value'] = preg_replace($pattern, $replace, $node->content['body']['#value']);
}
break;
case 'prepare' :
if ($node->type == 'news' ) {
$node->body = substr( $node->body, 0, stripos($node->body, '[lastplace]') );
}
break;
}
}
?>

Выглядит так:

Текст некоторого сообщения. Текст некоторого сообщения. Текст некоторого сообщения. Текст некоторого сообщения. Текст некоторого сообщения. Текст некоторого сообщения.

Вася Пупкин
Газета "Сельский трудовик"
Аватар пользователя beerman beerman 25 августа 2008 в 4:52

сам модуль еще "сырой". там еще дописываю ф-ю валидации.

кстати, нет ли у кого решения по поиску в тексте слов из заданного массива?
надо для проверки наличия нецензурных выражений в теле материала и замене их на что-либо.