То есть у тебя вместо node_access($op, $node, $account) должна быть проверка на включенный чекбокс?
Ну понятно, что там, где юзер соберется редактировать ноду, чекбокса не будет. То есть по сабмиту формы тебе надо куда-то регистрировать состояние чекбокса, а потом при нужде проверять. Так?
Если бы ты сделал модулем Profile - понятно. Там до значения чекбокса добраться легко.
В твоем случае - может работать напрямую с БД? Своя табличка... uid, value
Второй вариант - все-таки сделать роль и чекбоксом изменять ее разрешения.
function mymodule_install(){ // Создание таблиц при инсталляции модуля drupal_install_schema('mymodule'); } function mymodule_uninstall(){ // Удаление таблиц drupal_uninstall_schema('mymodule'); }
У мну флешка накрылась ((
Смотри в любом модуле, который создает свои таблицы. Там не так сложно. Что-то вроде db_query(), одним из параметров которой SQL-запрос на создание БД. Вот где и как оно вызывается - не помню.
А вроде для шестерки есть модуль для добавления CCK полей к профилю пользователя?
Или это просто потренироваться?-))
Если потренироваться.. качаем нужный список примеров: http://drupal.org/project/examples
Выбираем и берем за основу более подходящий по функционалу...
Доделываем как надо..
А вроде для шестерки есть модуль для добавления CCK полей к профилю пользователя?
Или это просто потренироваться?-))
Если потренироваться.. качаем нужный список примеров: http://drupal.org/project/examples
Выбираем и берем за основу более подходящий по функционалу...
Доделываем как надо..
ну в 7 ке то профелем не пользуются профиль 2 есть
да и не хочется ... хочется что то самом навоять... чтоб разобраться в азаххххх...
Комментарии
Обязательно в своем модуле?
Есть модуль ядра Profile, который позволяет это делать.
Ну а по существу вопроса - hook_form_alter.
Пример не в ту форму, и не того элемента, но проверенный )
<?php
$form[] = array_splice($form, 5, 0, $a);
function mylogin_form_alter(&$form, $form_state, $form_id) {
$user_login_forms = array('user_login', 'user_login_block');
if (in_array($form_id, $user_login_forms)) {
$a['new_field_login'] = array(
'#type' => 'textfield',
'#title' => 'Test',
'#maxlength' => 60,
'#size' => 15,
'#required' => 0,
'#attributes' => array('tabindex' => 1)
);
}
}
?>
Или я не так понял, и чекбокс надо вставлять совсем не в форму???
Я сделал так
if ($op == 'form' && $category == 'account') {
$form['own_edit_node_settings'] = array(
'#type' => 'fieldset',
'#title' => t('Private access settings'),
'#collapsible' => FALSE,
'#weight' => -10,
);
$form['own_edit_node_settings']['own_edit_node'] = array(
'#type' => 'checkbox',
'#title' => t('Own edit node'),
'#default_value' => $edit['own_edit_node'],
'#description' => t('Mark, if access is granted.'),
);
return $form;
}
}
если тут лишнее? заходя в редактирование аккаунта мы видим чекбокс который можно отметить и снять птичку.
теперь мне надо усложнить задачу и какое нить действие на вкл выключенный чибокс сделать...
например...
если чибокс включен разрешить юзерам редактировать свои созданные ноды...
есть код, котрый взависимости от роли разрешает запрещает это... а как к моей задачи переделать код...
$items['node/%node/edit']['access callback'] = 'mymodule_access';
}
function mymodule_perm() {
return array('denied edit own content');
}
function mymodule_access($op, $node, $account = FALSE) {
if (!$account) {
global $user;
$account = $user;
}
$node_access = node_access($op, $node, $account);
if ($op == 'update' && $node_access && $account->uid != 1) {
return (user_access('denied edit own content', $account) && ($node->uid == $account->uid)) ? NULL : TRUE;
}
else {
return $node_access;
}
}
То есть у тебя вместо node_access($op, $node, $account) должна быть проверка на включенный чекбокс?
Ну понятно, что там, где юзер соберется редактировать ноду, чекбокса не будет. То есть по сабмиту формы тебе надо куда-то регистрировать состояние чекбокса, а потом при нужде проверять. Так?
Если бы ты сделал модулем Profile - понятно. Там до значения чекбокса добраться легко.
В твоем случае - может работать напрямую с БД? Своя табличка... uid, value
Второй вариант - все-таки сделать роль и чекбоксом изменять ее разрешения.
из за каждого пука роли создавать... не айс.
точно.
т.е. надо как то создать таблицу для моего модуля с колонками uid юзера и значения который будет записываться 0 или 1 в зависимости что выбрано...
еще нужно на управление и вывод чекбокса права для роли назначить для моедераторов...
Что значит "как то создать"? CREATE TABLE ))
ну я пока что без понятия как создавать... и когда... и в каком файлу. вот буду на это мини модульке функции тренироваться.
полагаю что
в mymodule.instal
function mymodule_install() {
// Create tables.
drupal_install_schema('own_node_edit');
}
Или это не то,?
добавил вот это но таблицы не пояявляюстся
$schema['mytable1'] = array(
// Перечисление полей таблицы mytable1
);
$schema['mytable2'] = array(
// Перечисление полей таблицы mytable2
);
return $schema;
}
function mymodule_install() {
// Создание таблиц при инсталляции модуля
drupal_install_schema('mymodule');
}
function mymodule_uninstall() {
// Удаление таблиц
drupal_uninstall_schema('mymodule');
}
У мну флешка накрылась ((
Смотри в любом модуле, который создает свои таблицы. Там не так сложно. Что-то вроде db_query(), одним из параметров которой SQL-запрос на создание БД. Вот где и как оно вызывается - не помню.
Таблицу в бд удалось создать с 2 полями
$schema['mymodule'] = array(
'description' => 'The {mymodule} table.',
'fields' => array(
'uid' => array(
'description' => 'The user ID (corresponds to {user} table uid).',
'type' => 'int',
'not null' => TRUE,
),
'value' => array(
'description' => 'Value checkbox own node edit.',
'type' => 'int',
),
'primary key' => array('uid'),
);
return $schema;
}
Куда двигаться дальше? Как передавать uid и значение чибокса (0 или 1) в эти таблицы?
Флешка накрылась. Все, что нажито непосильным трудом (. api.d.ru умер (( api.d.org почему-то на басурманском (((
Сплошные засады.
По сабмиту формы, смотри в api.
подскажите пожалуйста
я вывел чибокс.
добавил еще в свой модуль
function mymodule_perm() {
return array('denied edit own content');
}
как сделать так что бы при включенном denied edit own content - созданный чибокс появлялся. а с выключенным не появлялся в акаунте?
как связать вывод чебокса с установленными правами ???
global $user;
if ($account && $user->uid != $account->uid) {
return user_access(denied edit own content); }
return user_access(denied edit own content);
}
может что то с этим
hook_block($op = 'list', $delta = 0, $edit = array())
А вроде для шестерки есть модуль для добавления CCK полей к профилю пользователя?
Или это просто потренироваться?-))
Если потренироваться.. качаем нужный список примеров: http://drupal.org/project/examples
Выбираем и берем за основу более подходящий по функционалу...
Доделываем как надо..
global $user;
switch ($op) {
case 'view':
if (user_access(denied edit own content) {
-----------вставить вывод чебокса........ но как?
}
return $form;
}
}
не в эту сторону копаю?
ну в 7 ке то профелем не пользуются профиль 2 есть
да и не хочется ... хочется что то самом навоять... чтоб разобраться в азаххххх...