Доброе утро. Подскажите, как темизировать этот блок. Почитав немного нашел, как определить этот блок для своей темы
<?php function тема_theme() {
return array(
'user_login_block' => array(
'arguments' => array('form' => NULL),
),
);
}
function тема_user_login_block($form) {
$output = '';
$items['links']=array();
if (variable_get('user_register', 1)) {
$items['links']['#value'] =l(t('Create new account'), 'user/register', array('attributes' => array('title' => t('Create a new user account.'))));;
}
$form['submit']['#type'] = 'submit';
$form['submit']['#value']= t('Log in');
$form['name']['#title'] = t('Username');
$form['pass']['#title'] = t('Password');
$output .= drupal_render($form['name']);
$output .= drupal_render($form['pass']);
$output .= drupal_render($form['submit']);
$output .= drupal_render($form['links']);
$output .= drupal_render($form);
return $output;
}
?>
И теперь я могу расставлять поля в том порядке, как мне хочется. Но как быть, если мне необходимо располагать поля не одно под другим, а примерно так:
"Название поля" "Форма"
"Название поля" "Форма"
"Кнопка"
"Ссылка 1" "Ссылка 2"
Также я настраивал вывод этого блока в произвольном месте страницы и пока не нашел ничего лучше, чем <?php $module = 'user'; $delta = 0; $block = (object) module_invoke($module, 'block', 'view', $delta); include "block-user-0.tpl.php";?>
Вывел этот блок в шапку и после логина на месте этого блока остается прямоугульник (проще говоря, блок после логина должен пропадать, а это происходит лишь частично)
Комментарии
Учите css.
display:inline;
}
Это жестоко с вашей стороны. Инклюдить не нужно. Читайте и научитесь. Только качественно читайте. Ответы
почтина ВСЕ вопросы есть на этом сайте. Поверьте.Без инклуда
<?php if (!$user->uid) {$block = module_invoke('user', 'block', 'view', 0);print $block['content'];}?>
Это хозяйство обернул в свой класс, дабы не портить другие формы, и при помощи css сделал:
Имя пользователя__Форма
Пароль___________Форма
(___ означает пробелы естественно=)), т.е как раз то, что было нужно.
Осталось переделать кнопку (внешний вид, это несложно) и ссылки Регистрация и Напомнить пароль расположить в линию, а не списком, как это делается по умолчанию. Хотя, если я не ошибаюсь эти две ссылки стандартные страницы друпала и можно их просто вывести в page.tpl.php как обычные ссылки.
2AI Иногда советы учить матчасть толкают на идеи. Хотя хотелось бы услышать твое мнение по выводу блока, правильно ли будет таким образом, ибо есть масса статей и про вывод блока инклудом своего шаблона и про тот, что описан в этом посте. В любом случае спасибо, решение проблемы близится к концу.
msidiagnos01: не совсем понятно, чем вы тут занимаетесь.
Зачем вы намертво печатаете блок в странице, если им можно управлять из админки? Блок, загруженный таким способом не кэшируется. Во-вторых, у вас будут траблы в дальнейшем, когда вы захотите поменять расположение этого блока
Ссылки по теме http://drupal.org/node/478328
http://drupal.org/node/19855
http://drupal.org/node/478328 читал уже.
"Во-вторых, у вас будут траблы в дальнейшем, когда вы захотите поменять расположение этого блока" - Какие?
Сделал свой регион, там где нужно вывести блок ну и всё выше описанное по статье http://drupal.org/node/478328.
Но честно говоря напрягает, способов много, ньюансы и последствия каждого мне неизвестны. Спасибо volocuga@drupal.org
Единственно, что к новоиспеченному блоку user-login-block.tpl.php применяется всё из block.tpl.php
Пока не придумал ничего интересней, чем создать файл block-user-0.tpl.php, чтобы он был приоритетней перед block.tpl.php и там уже настраивать все классы под блок входа в систему.
Итак подитожим.
В template.php определяем функцию для вашей темы
<?php
function имя_темы_theme(){
return array(
'user_login_block' => array(
'template' => 'user-login-block',
'arguments' => array('form' => NULL),
)
);
}
?>
Далее создаем файл user-login-block.tpl.php со следующим содержанием:
<div class="content">
<div>
<div class="form-item" id="edit-name-wrapper">
<label for="edit-name">Username: <span class="form-required" title="This field is required.">*</span></label>
<input type="text" maxlength="60" name="name" id="edit-name" size="15" value="" class="form-text required" />
</div>
<div class="form-item" id="edit-pass-wrapper">
<label for="edit-pass">Password: <span class="form-required" title="This field is required.">*</span></label>
<input type="password" name="pass" id="edit-pass" maxlength="60" size="15" class="form-text required" />
</div>
<input type="submit" name="op" id="edit-submit" value="Log in" class="form-submit" />
<div class="item-list">
<ul>
<li class="first"><a href="/user/register" title="Create a new user account.">Create new account</a></li>
<li class="last"><a href="/user/password" title="Request new password via e-mail.">Request new password</a></li>
</ul>
</div>
<input type="hidden" name="form_build_id" id="<?php echo form_clean_id ( 'form-' . drupal_get_token ()) ?>" value="<?php echo ( 'form-' . drupal_get_token ()) ?>" />
<input type="hidden" name="form_id" id="edit-user-login-block" value="user_login_block" />
</div>
</div>
</div>
Тут всё понятно, что, где и как выводится. Если сайт мультиязычный, то вместо Username: можете вписать <?php print t('Username')?>, если необходимости нет, вписывайте, что будет необходимо. (t('Username') вы также можете переопределить в переводу интерфейса). Остальные заголовки по аналогии и при необходимости.
Если больше ничего не делать, то дизайн будет браться из block.tpl.php. Если же есть необходимость для данного блока сделать свой дизайн, создаете файл block-user-0.tpl.php, в котором <?php echo $block->content; ?> и <?php echo $block->subject; ?> заворачиваете в нужную вам разметку, дивы, таблицы и т.д., свойства которых определяете в css.
Спасибо всем отписавшимся, в конечном итоге я остановился на этом.
подпишемся