Всем привет.
Есть табличка пользователей (отдельная страничка).
Нужно сделать следующее:
- вывести колонкой checkbox
- при отметке checkbox id пользователя должно записывать в переменную (если id несколько, то записываться они должны через запятую)
- также есть кнопка - "Написать отмеченным партнерам". После нажатия на кнопку пользователя перекидывает по адресу /messages/new/id,id1,id2
Подскажите, как это сделать?
Комментарии
в form_submit собираете строку из отмеченных id, затем
<?php
$form_state['redirect'] = 'messeges/new/'.$ids;
?>
Задам наверно самый глупый вопрос, но как собрать в 1 переменную отмеченный id?..
vbo?
или https://api.drupal.org/api/drupal/developer!topics!forms_api_reference.h...
я же не могу за вас все написать и протестировать. Я писал код прям тут, возможны баги. Я пытался донести до вас идею, а не решение.А вы просто скопировали даже не прочитав мой код и комменты в нем.
Во первых, удалите свою инициализацию rows вставьте мою. она должна быть в foreach. Во вторых,
В третьтих, это действительно весь код? Это ваш модуль? А вы читали, как правильно именовать функции в модулях? О системе хуков?
И так все чаще и чаще ... халява ...
В итоге все получилось.
Вышло так:
<?php /**
$link = '<a href="/stalfond/partners/'.$uid.'/nojs" class="use-ajax">Показать структуру</a>';
drupal_add_js('misc/ajax.js');
$title . $msg . $outputTable;
$link = '<a href="/stalfond/partners/'.$uid.'/nojs" class="use-ajax">Показать структуру</a>';
* возвращает строку статуса пользователя - с возможностью активации
*/
function get_useractive_status($uid, $active, $allow_change) {
if( $allow_change ) {
$active_str = $active ? '<a class="user-active use-ajax" href="/set_user_active/'.$uid.'/0/nojs">Активен</a>' : '<a class="user-noactive use-ajax" href="/set_user_active/'.$uid.'/1/nojs">Неактивен</a>';
}
else {
$active_str = $active ? '<span class="user-active">Активен</span>' : '<span class="user-noactive">Неактивен</span>';
}
return $active_str;
} /**
* Возвращает таблицу партнеров переданного человека.
*/
function get_table_partners($form, $form_state, $user) {
$form['#method'] = 'post';
$rezult = db_select('fstructure', 'fs')
->fields('fs')
->condition('ruid', $user->uid)
->execute();
$fs = $rezult->fetchAll();
$uids = array();
foreach($fs as $fsitem) $uids[] = $fsitem->uid;
$users = user_load_multiple($uids);
// разрешать менять активность
$allow_change_active = user_access('set active partners');
$rows = array();
foreach($users as $uid => $su){
//dsm($su);
$active = in_array('ФК', $su->roles);
$active_str = get_useractive_status($uid, $active, $allow_change_active);
$rows[] = array(
array('data'=>($form['check'] = array ('#type' => 'checkbox', '#name' => 'usid[]', '#return_value' => $uid,))),
array('data'=>theme('username', array('account'=>$su)) ),
array('data'=>format_date($su->created, 'short')),
array('data'=>$su->field_user_city['und'][0]['safe_value']),
array('data'=>$active_str, 'id'=>'link-active-'.$uid),
array('data'=>"<a class='row-message' href='messages/new/$uid'>Написать</a>"),
array('data'=>$link, 'id'=>'link-load-'.$uid ),
);
$rows[] = array(
array('data'=>'', 'colspan'=>7, 'id'=>'row-structure-'.$uid, 'class'=>'row-structure-load', )
);
}
$headers = array(
array('data'=>'id'),
array('data'=>'Имя'),
array('data'=>'Дата регистрации'),
array('data'=>'Город'),
array('data'=>'Активность'),
array('data'=>'Написать'),
array('data'=>'Структура'),
);
$colgroup = array(
array( array( 'class' => array('tpartners-col1') ) ),
array( array( 'class' => array('tpartners-col2') ) ),
array( array( 'class' => array('tpartners-col3') ) ),
array( array( 'class' => array('tpartners-col4') ) ),
array( array( 'class' => array('tpartners-col5') ) ),
array( array( 'class' => array('tpartners-col6') ) ),
array( array( 'class' => array('tpartners-col7') ) ),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Начать диалог с выделенными партнерами',
);
$form['table'] = array(
'#theme' => 'table',
'#header' => $headers,
'#rows' => $rows,
'#colgroups' => $colgroup,
'#attributes'=> array('id'=>'table-structure'),
'#empty' => 'Нет зарегистрированных партнеров',
);
return $form;
}
function
get_table_partners_submit($form, &$form_state) {$form['#method'] = 'post';
global $user;
if(isset($_POST['usid'])){
$values = $_POST['usid'];
$ids = '';
foreach ($values as $v) {
$ids .= $v.',';
}
if (!empty($ids)) {
$ids = substr($ids, 0, strlen($ids) - 1); // удалить последнюю запятую
$form_state['redirect'] = 'messages/new/'.$ids; //перенаправить юзера на нужную страницу
}
}
else{
drupal_set_message('Вы не отметили ни одного партнера');
}
} /**
* page partners for user
*/
function user_partners() {
global $user;
global $hide_second_sidebar;
$hide_second_sidebar = true;
$outputTable = drupal_render(drupal_get_form('get_table_partners',$user));
$title = '<h2>Структура ' . theme('username', array('account'=>$user)) . '</h2>';
$msg = '<p>Столбец "активность" позволяет Вам активировать аккаунт Вашего партнера. Активация аккаунта подразумевает то, что Вы знаете этого человека, и этот человек уже работает или готов работать в компании. После активации ему станут доступны скрытые материалы, и после этого он также сможет менять активность уже своих партнеров.</p>';
return
}
function get_table_partnerss($user) {
$rezult = db_select('fstructure', 'fs')
->fields('fs')
->condition('ruid', $user->uid)
->execute();
$fs = $rezult->fetchAll();
$uids = array();
foreach($fs as $fsitem) $uids[] = $fsitem->uid;
$users = user_load_multiple($uids);
// разрешать менять активность
$allow_change_active = user_access('set active partners');
$rows = array();
foreach($users as $uid => $su){
//dsm($su);
$active = in_array('ФК', $su->roles);
$active_str = get_useractive_status($uid, $active, $allow_change_active);
$rows[] = array(
array('data'=>($form['check'] = array ('#type' => 'checkbox', '#name' => 'usid[]', '#return_value' => $uid,))),
array('data'=>theme('username', array('account'=>$su)) ),
array('data'=>format_date($su->created, 'short')),
array('data'=>$su->field_user_city['und'][0]['safe_value']),
array('data'=>$active_str, 'id'=>'link-active-'.$uid),
array('data'=>"<a class='row-message' href='messages/new/$uid'>Написать</a>"),
array('data'=>$link, 'id'=>'link-load-'.$uid ),
);
$rows[] = array(
array('data'=>'', 'colspan'=>7, 'id'=>'row-structure-'.$uid, 'class'=>'row-structure-load', )
);
}
$headers = array(
array('data'=>'id'),
array('data'=>'Имя'),
array('data'=>'Дата регистрации'),
array('data'=>'Город'),
array('data'=>'Активность'),
array('data'=>'Написать'),
array('data'=>'Структура'),
);
$colgroup = array(
array( array( 'class' => array('tpartners-col1') ) ),
array( array( 'class' => array('tpartners-col2') ) ),
array( array( 'class' => array('tpartners-col3') ) ),
array( array( 'class' => array('tpartners-col4') ) ),
array( array( 'class' => array('tpartners-col5') ) ),
array( array( 'class' => array('tpartners-col6') ) ),
array( array( 'class' => array('tpartners-col7') ) ),
);
return theme('table', array(
'header' => $headers,
'rows' => $rows,
'colgroups' => $colgroup,
'attributes'=> array('id'=>'table-structure'),
'empty' => 'Нет зарегистрированных партнеров',
));
} /**
* ajax load partners
*/
function user_partners_ajax($user, $mode=null) {
if($mode != 'ajax') {
drupal_goto('user/'.$user->uid.'/partners');
}
$outputTable = get_table_partnerss($user);
$outputTable = "<div class=\"inner-table\">$outputTable</div>";//<span class=\"shlink\" >скрыть/показать</span>
$commands = array();
$commands[] = ajax_command_html('#row-structure-'.$user->uid, $outputTable);
$commands[] = ajax_command_html('#link-load-'.$user->uid, "<div><span class=\"shlink\" >Cкрыть/показать</span></div>");
$commands[] = ajax_command_data('#link-load-'.$user->uid, 'uid', $user->uid);
return array(
'#type' => 'ajax',
'#commands' => $commands,
);
} /**
* меняет статус активности пользователя - добавляет/убавляет роль ФК
*/
function set_user_active($user, $status=0, $mode=null) {
if($mode != 'ajax') {
drupal_goto('user/'.$user->uid.'/partners');
}
$roles = user_roles();
$roles = array_flip($roles);
$role_fk = $roles['ФК'];
if($status) {
$user->roles[$role_fk] = 'ФК';
} else {
unset($user->roles[$role_fk]);
}
user_save($user);
$active = in_array('ФК', $user->roles);
$output = get_useractive_status($user->uid, $active, 1);
$commands = array();
$commands[] = ajax_command_html('#link-active-'.$user->uid, $output);
return array(
'#type' => 'ajax',
'#commands' => $commands,
);
} ?>
Всем спасибо за помощь