Добавить чекбокс в аккаунт юзера

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

Комментарии

Аватар пользователя Vlk Vlk 22 декабря 2011 в 0:13

Обязательно в своем модуле?
Есть модуль ядра Profile, который позволяет это делать.
Ну а по существу вопроса - hook_form_alter.

Пример не в ту форму, и не того элемента, но проверенный )

<?php
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)
    ); 

    

$form[] = array_splice($form50$a);
  } 
}
?>

Или я не так понял, и чекбокс надо вставлять совсем не в форму???

Аватар пользователя iNFerNo iNFerNo 22 декабря 2011 в 1:04

Я сделал так

function mymodule_user($op, &$edit, &$account, $category = NULL) {

  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;
  }

}

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

теперь мне надо усложнить задачу и какое нить действие на вкл выключенный чибокс сделать...

например...

если чибокс включен разрешить юзерам редактировать свои созданные ноды...

есть код, котрый взависимости от роли разрешает запрещает это... а как к моей задачи переделать код...

function mymodule_menu_alter(&$items) {
    $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;
    }
    }
Аватар пользователя Vlk Vlk 22 декабря 2011 в 1:57

То есть у тебя вместо node_access($op, $node, $account) должна быть проверка на включенный чекбокс?
Ну понятно, что там, где юзер соберется редактировать ноду, чекбокса не будет. То есть по сабмиту формы тебе надо куда-то регистрировать состояние чекбокса, а потом при нужде проверять. Так?

Если бы ты сделал модулем Profile - понятно. Там до значения чекбокса добраться легко.
В твоем случае - может работать напрямую с БД? Своя табличка... uid, value
Второй вариант - все-таки сделать роль и чекбоксом изменять ее разрешения.

Аватар пользователя iNFerNo iNFerNo 22 декабря 2011 в 7:59

из за каждого пука роли создавать... не айс.

"Vlk" wrote:
То есть по сабмиту формы тебе надо куда-то регистрировать состояние чекбокса, а потом при нужде проверять. Так?

точно.

т.е. надо как то создать таблицу для моего модуля с колонками uid юзера и значения который будет записываться 0 или 1 в зависимости что выбрано...

еще нужно на управление и вывод чекбокса права для роли назначить для моедераторов...

Аватар пользователя Vlk Vlk 22 декабря 2011 в 9:49

iNFerNo wrote:
из за каждого пука роли создавать... не айс.
"Vlk" wrote:
То есть по сабмиту формы тебе надо куда-то регистрировать состояние чекбокса, а потом при нужде проверять. Так?

точно.

т.е. надо как то создать таблицу для моего модуля с колонками uid юзера и значения который будет записываться 0 или 1 в зависимости что выбрано...

еще нужно на управление и вывод чекбокса права для роли назначить для моедераторов...

Что значит "как то создать"? CREATE TABLE ))

Аватар пользователя iNFerNo iNFerNo 22 декабря 2011 в 10:26

ну я пока что без понятия как создавать... и когда... и в каком файлу. вот буду на это мини модульке функции тренироваться.

Аватар пользователя iNFerNo iNFerNo 22 декабря 2011 в 11:00

добавил вот это но таблицы не пояявляюстся

function mymodule_schema() {
  $schema['mytable1'] = array(
     // Перечисление полей таблицы mytable1
  );
  $schema['mytable2'] = array(
    // Перечисление полей таблицы mytable2
  );
  return $schema;
}

function mymodule_install() {
  // Создание таблиц при инсталляции модуля
  drupal_install_schema('mymodule');
}
function mymodule_uninstall() {
  // Удаление таблиц
  drupal_uninstall_schema('mymodule');
}

Аватар пользователя Vlk Vlk 22 декабря 2011 в 11:39

У мну флешка накрылась ((
Смотри в любом модуле, который создает свои таблицы. Там не так сложно. Что-то вроде db_query(), одним из параметров которой SQL-запрос на создание БД. Вот где и как оно вызывается - не помню.

Аватар пользователя iNFerNo iNFerNo 22 декабря 2011 в 11:47

Таблицу в бд удалось создать с 2 полями

function mymodule_schema() {

$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;

   }

Аватар пользователя Vlk Vlk 22 декабря 2011 в 12:11

iNFerNo wrote:
Куда двигаться дальше? Как передавать uid и значение чибокса (0 или 1) в эти таблицы?

Флешка накрылась. Все, что нажито непосильным трудом (. api.d.ru умер (( api.d.org почему-то на басурманском (((
Сплошные засады.

По сабмиту формы, смотри в api.

Аватар пользователя iNFerNo iNFerNo 22 декабря 2011 в 11:55

"iNFerNo" wrote:
еще нужно на управление и вывод чекбокса права для роли назначить для моедераторов...

подскажите пожалуйста

я вывел чибокс.

добавил еще в свой модуль

function mymodule_perm() {
return array('denied edit own content');
}

как сделать так что бы при включенном denied edit own content - созданный чибокс появлялся. а с выключенным не появлялся в акаунте?

Аватар пользователя Orion76 Orion76 22 декабря 2011 в 12:22

А вроде для шестерки есть модуль для добавления CCK полей к профилю пользователя?
Или это просто потренироваться?-))

Если потренироваться.. качаем нужный список примеров: http://drupal.org/project/examples
Выбираем и берем за основу более подходящий по функционалу...
Доделываем как надо..

Аватар пользователя iNFerNo iNFerNo 22 декабря 2011 в 12:23
function mymodule_block($op = 'list', $delta = 0, $edit = array()) {
  global $user;

  switch ($op) {

    case 'view':
      if (user_access(denied edit own content)  {
   

      -----------вставить вывод чебокса........  но как?

      }
       return $form;
}  
}

не в эту сторону копаю?

Аватар пользователя iNFerNo iNFerNo 22 декабря 2011 в 12:25

"orion76" wrote:
А вроде для шестерки есть модуль для добавления CCK полей к профилю пользователя?
Или это просто потренироваться?-))

Если потренироваться.. качаем нужный список примеров: http://drupal.org/project/examples
Выбираем и берем за основу более подходящий по функционалу...
Доделываем как надо..

ну в 7 ке то профелем не пользуются профиль 2 есть

да и не хочется ... хочется что то самом навоять... чтоб разобраться в азаххххх...