Ага, опять про них самых...

Прислано: P.Selfin@drupal.org

сб, 10/09/2011 - 11:47

Другие статьи по теме:

Вопрос как обычно по формам...
Нужно темизировать форму входа (выводится через fancy login). Как я понимаю нужно в user.module найти нужный кусок кода, встаить его в template.php своей темы, переименовать нужным образом и после этого изменять... Нашел два куска кода(функции) - function user_login_block($form) и function user_login($form, &$form_state) - второй кажется более логичным, но изменения кода ни к чему не приводят... Может функцию неправильно переименовываю, может вообще все не так делаю?
По идее все просто должно быть, но как то не вяжется у меня((( Ссылке на достойный мануал или личной помощи буду благодарен.

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано RxB в сб, 10/09/2011 - 14:56.

Петька позоришь же


Опубликовано P.Selfin@drupal.org в сб, 10/09/2011 - 15:32.

Позорю, а как быть еще?
Я с этой темой так и не разобрался((
Вандюка читал читал, но болты...(


Опубликовано orion76 в сб, 10/09/2011 - 15:47.

в hook_form_alter переопределяем параметр #theme для формы на свой(имя функции темизации)
регистрируем функцию темизации указвнную в #theme для формы в hook_theme(смотрим примеры других модулей)
пишем свою вункцию темизации для формы..(смотрим примеры других модулей)
все..


Опубликовано shp@drupal.org в сб, 10/09/2011 - 17:16.

Зачем какой-то Вандюк? Исходники друпала изучайте )


Опубликовано P.Selfin@drupal.org в сб, 10/09/2011 - 18:54.

таааак... уже близок к разгадке задачи)))
а как можно вставить кусок простого хтмл в определяемую функцию theme_form_user_login_alter???
и еще не понятно как заменить/убрать/переместить формируемые ссылки "Зарегистрироваться/напомнить пароль"...


Опубликовано RxB в сб, 10/09/2011 - 19:05.

Полностью пиши что куда чо добавить


Опубликовано P.Selfin@drupal.org в сб, 10/09/2011 - 19:31.

В целом мне нужно получить это

Сейчас в template.php родил такое чюдо:

<?php
function southguide_theme_form_user_login_alter(&$form) {
//  drupal_set_message('</p><pre>' . check_plain(var_export($form, TRUE)) . '</pre><p>');

  
global $user;

  
// If we are already logged on, go to the user page instead.
  
if ($user->uid) {
    
drupal_goto('user/' $user->uid);
  }
// Убираем стандартные ссылки регистрации и напоминания пароля.
//  unset($form['links']);

  // Display login form:
  
$form['name'] = array('#type' => 'textfield',
//   '#title' => t('<a href="#">Имя пользователя</a>'),
    
'#description' => t(''),
    
'#size' => 0,
    
'#maxlength' => USERNAME_MAX_LENGTH,
    
'#required' => TRUE,
  );

 
// $form['name']['#description'] = t('Бяка Бука Enter your @s username.', array('@s' => variable_get('site_name', 'Drupal')));

  
$form['pass'] = array('#type' => 'password',
//    '#title' => t('Пароль'),
    
'#description' => t(''),
    
'#size' => 0,
    
'#required' => TRUE,
  );

  
$form['#validate'] = user_login_default_validators();

  
$form['actions'] = array('#type' => 'actions');

  
$form['actions']['submit'] = array('#type' => 'submit''#value' => t('Войти'));

  return 
$form;

}
?>

Что бы инпуты обернуть в дивы, как понимаю, использовать #prefix и #suffix надо.
Нынешние ссылки "Создать новую учетную запись/Запросить новый пароль" можно дисплей:ноном закрыть.
А вот как вывести перед инпутами куски кода, как на картинке, с именем/регистрацией и паролем/восстановлением нипонятно...
Встречал переменную @output, но похоже она для других целей...


Опубликовано mak-vardugin в сб, 10/09/2011 - 20:22.

подписываюсь


Опубликовано annya в сб, 10/09/2011 - 20:46.

Через элемент формы типа markup. С помощью него можно сформировать любой кусок хмтла. Или в тот же prefix использовать.


Опубликовано P.Selfin@drupal.org в вс, 11/09/2011 - 06:10.

Влкруг маркапа я ходил бродил... Думал для него отдельный элемент сделать -не получилось... Рекомендуешь прямо к элементу его подключить? Попробуемс..


Опубликовано annya в вс, 11/09/2011 - 06:16.

"P.Selfin@drupal.org" написал(а):

Рекомендуешь прямо к элементу его подключить?

Прямо к элементу не получится - маркап это отдельный элемент формы, как чекбокс, или тектфилд


Опубликовано P.Selfin@drupal.org в вс, 11/09/2011 - 07:31.

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

Пробовал по примеру:

<?php
$form
['blinky'] = array(
'#type' 'markup',
'#value' '<p>бяка</p>',
);
?>

Но выдается белая страница (видимо использовать где попало чужие формы незя, и вообще, что такое $form['blinky']?)


Опубликовано P.Selfin@drupal.org в вс, 11/09/2011 - 07:43.

Сделал пока так:

<?php
  $form
['name'] = array('#type' => 'textfield',
//   '#title' => t('<a href="#">Имя пользователя</a>'),
    
'#description' => t(''),
    
'#size' => 0,
    
'#maxlength' => USERNAME_MAX_LENGTH,
    
'#required' => TRUE,
    
'#prefix' => '<div id="usernamelogin">Имя пользователя<br><a href="user/register">Зарегистрироваться</a></div><div id="usernamelogintextfield">',
    
'#suffix' => '</div>',
  );
?>

Дальше уже можно css-ом править, но сдается мне не совсем кошерный способ...


Опубликовано annya в вс, 11/09/2011 - 07:49.

Нужно так(почитайте про ассоциативные массивы в php, как оформляется связь ключ-значение):

<?php
$form['blinky'] = array(
'#type' => 'markup',
'#value' => '<p>бяка</p>',
);
?>


Опубликовано P.Selfin@drupal.org в пн, 12/09/2011 - 12:39.

Не знаю насколько это решение правильное, но на данный момент смог получить такой результат, который уже можно темизировать css-ом более менее:

function mytheme_form_user_login_alter(&$form) {
  drupal_set_message('</p><pre>' . check_plain(var_export($form, TRUE)) . '</pre><p>');
 
  global $user;
 
  // If we are already logged on, go to the user page instead.
  if ($user->uid) {
    drupal_goto('user/' . $user->uid);
  }
// Убираем стандартные ссылки регистрации и напоминания пароля.
//  unset($form['links']);
 
// пробуем использовать #markup
/*	
$form['blinky'] = array(
'#type' => 'markup',
'#value' => '<p>бяка</p>',
);
*/
  // Display login form:
  $form['name'] = array('#type' => 'textfield',
//   '#title' => t('<a href="#">Имя пользователя</a>'),
    '#description' => t(''),
    '#size' => 0,
    '#maxlength' => USERNAME_MAX_LENGTH,
    '#required' => TRUE,
	'#prefix' => '<div id="usernamelogin">Имя пользователя<br><a href="user/register">Зарегистрироваться</a></div><div id="usernamelogintextfield">',
	'#suffix' => '</div>',
  );
 
 // $form['name']['#description'] = t('Бяка Бука Enter your @s username.', array('@s' => variable_get('site_name', 'Drupal')));
 
  $form['pass'] = array('#type' => 'password',
//    '#title' => t('Пароль'),
    '#description' => t(''),
    '#size' => 0,
    '#required' => TRUE,
	'#prefix' => '<div id="userpasslogin">Пароль<br><a href="user/password">Забыли пароль?</a></div><div id="userpasslogintextfield">',
	'#suffix' => '</div>',
  );
 
  $form['#validate'] = user_login_default_validators();
 
  $form['actions'] = array('#type' => 'actions');
 
  $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Войти'));
 
  return $form;
 
}

То есть нужный мне html вставлен в атрибут #prefix...
Продолжаем разбираться с переопределением функций, но теперь уже контриб-модулей))