Помните, в начале статьи я говорил о том, что мы добавим несколько «фич» к нашему трэкеру:
- возможность не показывать конкретный материал (в независимости от типа)
- возможность закрепить материал вверху списка.
Нам надо регулировать доступ к двум действиям нашего модуля:
- Разрешение на запрет размещение ноды в трэкере
- Разрешение на закрепление ноды вверху списка трэкера.
Шаг номер 11:
Определим наш хук perm следующим образом:
return array('access not place cctracker', 'access sticky cctracker');
}
Для создания данной таблицы нам надо разобраться еще с одним важным файлом в системе построения модулей под Друпал. Название этого файла строится как - имя_модуля.install, или в нашем случае cctracker.install.
Шаг номер 12:
Определяем схему нашей таблицы, она достаточно проста
Для определения таблиц используется Scheme API, которое позволяет модулю определить свою(и) таблицу(ы) в базе данных и обеспечивает функции API для создания, удаление и изменение таблицы, столбцов, ключей и индексов.
// $Id$
/**
* File: cctracker.install
* Install/uninstall module cctracker.
*/
function cctracker_schema() {
$schema['node_cctracker'] = array(
'fields' => array(
'nid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
),
'cc_sticky' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
),
'cc_sticky_weight' => array(
'type' => 'int',
'not null' => TRUE,
'default' => 0,
),
'cc_not_public' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
),
),
'indexes' => array(
'cc_sticky' => array('cc_sticky','cc_sticky_weight'),
'cc_not_public' => array('cc_not_public'),
),
'primary key' => array('nid'),
);
return $schema;
}
Основной хук в используемый в данном файле это хук install
Наиболее типичным применением для хука install является создание таблиц, используемых в модуле.
Также мы используем хук uninstall , который запускается во время удаления модуля (не деактивации модуля а именно удаления)
Шаг номер 13:
Добавляем два хука - install и uninstall в файл cctracker.install.
// Создаем таблицу.
drupal_install_schema('cctracker');
// понизим вес нашего модуля в системе
// нечего ему выполнятся в начале цепочки вызова хуков
db_query("UPDATE {system} SET weight = 10 WHERE name = 'cctracker'");
}
function cctracker_uninstall() {
// Удаляем таблицу
drupal_uninstall_schema('cctracker');
// подчищаем за собой (удаляем переменные из таблицы variable созданные нашим модулем
db_query("DELETE FROM {variable} WHERE name LIKE 'cctracker%%'");
}
В вашей базе данных должна появится таблица node_cctracker (если вы используете префикс в базе, то соответственно {префикс}_node_cctracker).
Не забываем повторить настройку модуля, так как во время удаления модуля все настройки нашего модуля хранящиеся в таблице variable были удалены.
