В профиле имеются дополнительные поля. В частности название газеты и ФИО. У каждого пользователя-редактора они свои.
При сохранении нового материала необходимо добавлять в body материала ФИО юзера и имя газеты.
скорее не название модуля, а тип материала. в моем случае типа материала - 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;
}
}
?>
и нифига не выходит. ничего не пишет в сообщении.
все выходные на смарку. где грабли, друзья?
Я все это пытался сделать в 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 />, и любые другие теги обрезаются.
Подскажите, в чем моя ошибка?
окончательно выглядит так:
<?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;
}
}
?>
Выглядит так:
Текст некоторого сообщения. Текст некоторого сообщения. Текст некоторого сообщения. Текст некоторого сообщения. Текст некоторого сообщения. Текст некоторого сообщения.
сам модуль еще "сырой". там еще дописываю ф-ю валидации.
кстати, нет ли у кого решения по поиску в тексте слов из заданного массива?
надо для проверки наличия нецензурных выражений в теле материала и замене их на что-либо.
Комментарии
<?php
hook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
if ($op == 'prepare') {
}
}
?>
тогда скорее мне нужен
<?php if ($op == 'submit') { ?>
перед записью чтобы добавлял.
вопрос: как получить <?php print_r($node); ?>
?
<?php
function hook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch ($op) {
case 'submit':
drupal_set_message(t('Taram Param'));
break;
}
}
?>
никакого эффекта.
или вместо hook надо что-то другое писать?
ну дак он в функцию и передается сам
вместо hook надо писать название вашего модуля
скорее не название модуля, а тип материала. в моем случае типа материала - 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;
}
}
?>
и нифига не выходит. ничего не пишет в сообщении.
все выходные на смарку. где грабли, друзья?
решено.
Я все это пытался сделать в 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 />
, и любые другие теги обрезаются.Подскажите, в чем моя ошибка?
function newshook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch ($op) {
case 'alter':
if ($node->type == 'news' ) {
$node->body .= '<b>толстый шрифт</b>';
}
break;
}
}
?>
оно?
ой не то. Вот вариант. Теперь, если нужно, осталось убрать подпись из ноды, когда она открывается в форме для редактирования.
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;
}
}
почти. только еще надо добавить формат ввода
<?php
$node->format = 3;
?>
окончательно выглядит так:
<?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;
}
}
?>
Выглядит так:
Текст некоторого сообщения. Текст некоторого сообщения. Текст некоторого сообщения. Текст некоторого сообщения. Текст некоторого сообщения. Текст некоторого сообщения.
Газета "Сельский трудовик"
Модуль не выложите? Или в какой конкретный файл вставлять надо?
сам модуль еще "сырой". там еще дописываю ф-ю валидации.
кстати, нет ли у кого решения по поиску в тексте слов из заданного массива?
надо для проверки наличия нецензурных выражений в теле материала и замене их на что-либо.