-
name = Annotate
description = Allows users to annotate nodes.
core = 6.x
package = Pro Drupal Development
-
<?php
function annotate_menu(){
$items['admin/settings/annotate'] = array(
'title'=>t('Annotation settings'),
'description'=>t('Change how annotation behave.'),
'page callback'=>'drupal_get_form',
'page arguments'=> array('annotate_admin_settings'),
'access arguments' => array('administer annotations'),
'type'=> MENU_NORMAL_ITEM,
'file'=>'annotate.admin.inc',
);
return $items;
}?>
-
<?php
function annotate_admin_settings()
{
//Получить массив типов узлов с внутренними именами в качестве ключей
// и "дружественными именами" в качестве значений. Например,
// array ('page'=>'Page','story'=>'Story');
$options = node_get_types('names');
$form['annotate_node_types'] = array(
'#type'=>'checkboxes',
'#title'=>t('Users may annotate these content types'),
'#options'=>$options,
'#default_value'=>variable_get('annotate_nodetypes',
array('page')),
'#description'=>t('A text field will be available on these
content types to make user-specific notes.'),
);
return system_settings_form($form);
}?>
-
<?php
function annotate_nodeapi(&$node, $op, $teaser, $page)
{
global $user;
global $nid;
global $node_annotation;
switch ($op){
//Операция view означает что узел сейчас отображен.
case 'view':
//Прервать если пользователь анонимный или не page.
if (!$page || $user->uid == 0){
break;
}
//Найти типы узлов которые надо аннотировать
$types_to_annotate = variable_get('annotate_node_',array('page'));
//Прервать если данный узел не подл. аннотации.
if(!in_array($node->type, $types_to_annotate)){
break;
}
//Получить аннотацию из бд. и сохр. ее в node
$result = db_query('SELECT note FROM {annotations} WHERE nid = %d AND uid = %d', $node->nid,$user->uid);
$node_annotation = db_result($result);
$nid = $node->nid;
$node->content['annotation_form'] = array(
'#value'=> drupal_get_form('annotate_entry_form'),
'#weight'=>10
);
break;
case 'delete':
db_query('DELETE FROM {annotation} WHERE nid = %d',$node->nid);
break;
}
} ?>
-
<?php
function annotate_entry_form($node )
{
global $nid;
global $node_annotation;
//Определить fieldset.
$form['annotate'] = array(
'#type'=> 'fieldset',
'#title'=>t('Annotations')
);
//Определить textarea внутри fieldset.
$form['annotate']['note'] = array(
'#type'=>'textarea',
'#title'=>t('Notes'),
'#default_value'=> $node_annotation,
'#description'=>t('Make your personal annotation about this content here. Only
you (and the site administrator) will be able to see them.')
);
$form['annotate']['nid'] = array(
'#type'=>'hidden',
'#value'=> $nid
);
//Определить фу-цию submit.
$form['annotate']['submit'] = array(
'#type'=>'submit',
'#value'=>t('Update')
);
return $form;
}
?>
-
<?php
function annotate_entry_form_submit($form,$form_state)
{
global $user;
$note = $form_state['values']['note'];
$nid = $form_state['values']['nid'];
db_query("DELETE FROM {annotations} WHERE nid = %d and uid =%d",$nid, $user->uid);
db_query("INSERT INTO {annotations} (nid, uid, note, created) VALUES (%d,%d,'%s',%d)",$nid, $user->uid, $note, time());
drupal_set_message(t('Your annotation was saved.'));
}
?>
-
<?php
function annotate_menu(){
$items['admin/settings/annotate'] = array(
'title'=>t('Annotation settings'),
'description'=>t('Change how annotation behave.'),
'page callback'=>'drupal_get_form',
'page arguments'=> array('annotate_admin_settings'),
'access arguments' => array('administer annotations'),
'type'=> MENU_NORMAL_ITEM,
'file'=>'annotate.admin.inc',
);
return $items;
}?>
-
<?php
function annotate_entry_form_submit($form,$form_state)
{
global $user;
$note = $form_state['values']['note'];
$nid = $form_state['values']['nid'];
db_query("DELETE FROM {annotations} WHERE nid = %d and uid =%d",$nid, $user->uid);
db_query("INSERT INTO {annotations} (nid, uid, note, created) VALUES (%d,%d,'%s',%d)",$nid, $user->uid, $note, time());
drupal_set_message(t('Your annotation was saved.'));
}
?>
Комментарии
6. потерялся.
Там "без комментариев".
Я писал уже про то, что эта книга из одни опечаток сделана, меня обкакали в итоге:
http://drupal.ru/node/25671
а то что я писал - в мусор. Ну да и наплевать.
2Автор: смотри и тебя в мусор щас определят!
Нда кстати, смените название или текст выше картинок напишите - это ваапще о чем? А то не понятно было
Да, я тоже там кучу опечаток нашел, и в части перевода тоже, правда не выписывал.
Сгрузите с сайта издательства архив с примерами, там все правильно.
Примеры с сайта издательства 100% нерабочие и 70% не соответствуют книжным.
P.S Тут единственные рабочие примеры.
Не поленился, еще раз поставил модуль annotate из второй главы. 100% рабочий демопример.
Возможно с процентом несоответствия с книжкой вы близки к истине. Но про "нерабочесть" точно пальцем в небо - поправьте цифру 100, если хотите быть хоть немножко объективны.
Кстати, возможно вы скачали примеры от предыдущей книги (про 5й друпал).
По поводу примера описанного выше (из этой ноды)чекбоксы на другие типы материалов не переключаются т.е. модуль работает только с типом материала page, что не совсем корректно. В чём может быть причина?
Да нормально все правильная книга заставляющая думать и искать что в ней не так :).
А то привыкли копипастить в слепую.
А пойти на друпал орг примеры посмотреть, а залезть в АПИ и сравнить с тем что в книжке и пометить карандашиком как топикстартер?
Я больше чем уверен что при создании своего меню у топикстартера нет вопросов для форумчан, а вот ответы он уже может и выдать :).
Вывод книга хорошая, заставляющая новичков думать и искать правильные решения в ошибочных примерах. Но ее бета версия не стоит таких денег за которые ее продают конечному потребителю.
glu2006, я бы согласился с вами, но есть одно НО.
Новичок он на то и новичок, что ещё почти ничего не знает. Именно поэтому он не в состоянии найти ошибки, а вот наступить на них - запросто. В итоге ничего не работает, что делать непонятно! Да, можно, изучать исходники других модулей, засесть за словарь и переводить английские доки, но это равносильно вырыванию гланд не через горло, а простите через задницу.
Книги для начинающих должны быть вылизаны, вычитаны, а все примеры 100% отлаженны и рабочие! Вот для людей имеющих определённый уровень можно усложнять задачу и заставлять не тупо копировать!
Есть в этих словах правда :). Ноя сужу по собственному опыту. Я начинал учить 5-ку именно по книжке этого издательства причем не знал ни PHP ни всего другого, натыкался на не работающие примеры, и садился и искал почему он не работает. Психовал, ругался матом, попутно изучая английский лопатя и переворачивая кучу информации. Не спорю может я и потерял кучу времени, но зато все до чего дошел самостоятельно помню как отче наш.
А с большего как это уже не раз говорилось если человек чего-то хочет достичь он этого достигнет с помощью книги или без нее, с помощью советов бывалых или без них, убив на это год или месяц. Главное поставить цель и вперед на мины.
А то что ее халтурно перевели на русский язык и не проредактировали тексты и код так это вина только издательства "Вильямс", поскольку работают там разгильдяи переводчики
И кто Вам сказал что эта книга для новичков?
у нее если вы обратили внимание на задней странице написан этакий слоган "Профессионалам от Профессионалов" (может там заложен и нейкий другой смысл но я его не нашел).
Там-же написано где можно взять все исходные коды примеров приведенных в книге, не работает вперед в глобальные просторы мировой сети. http://www.drupalbook.com/node/2
В общем книга нужна для того чтобы ее читать и самое главное осмысленно читать.
> психовал, ругался матом, попутно изучая английский лопатя и переворачивая кучу информации. Не спорю может я и потерял кучу времени, но зато все до чего дошел самостоятельно помню как отче наш.
Видите, сами же согласны. Потеряли кучу времени! Ладно вам хватило упорства не бросить всё на полдороги, а представьте человека, которому нужно просто освоить CMS, не важно какую. Останется ли он с Drupal при таком раскладе или пойдёт поискать что полегче? Думаю, что наиболее вероятен последний вариант. И его трудно будет в этом упрекнуть.
Книга полезная, спору нет. Я, например, таки написал свой модуль по ней, прочитав буквально 50 страниц. Хотя и наступил на кучу грабель, но всё-таки учитывая, что немножко знаю и PHP и Drupal - все эти грабли успешно преодолел. Просто удручающе это выглядит для новичков, увы!
А я и не буду его упрекать: "Нет стремления тогда зачем ты здесь?"
Вот и все что хочется ответить такому новичку.
Вы думаете книги на русском по Joomla или Wordpress или еще какой CMS переведены лучше?
Очень много новичков купив книжку и даже толком не прочитав ее уже кричат "Я знаю кунг-фу" :).
Ладно, на сим прекращаю свой оффтоп. Поскольку разговор начинался про непорядок в книге, а закончился как всегда "Эээх молодежь" :).