Всплывающее окно

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

Комментарии

Аватар пользователя Orion76 Orion76 13 июня 2012 в 3:07

Ради любопытства спросил у гугла:
drupal block--user-login.tpl.php во всплывающем окне через jquery.

гугл вывалил целую кучу вполне рабочих решений..

Аватар пользователя tyuirk tyuirk 13 июня 2012 в 9:06

"orion76" wrote:
гугл вывалил целую кучу вполне рабочих решений..

Ну так давайте разберем хоть одно рабочее решение!)

Аватар пользователя Orion76 Orion76 13 июня 2012 в 10:06

например вот это
http://drupalace.ru/lesson/delaem-popup-login-na-jqueryuidialog

Только автор данного урока забыл уточнить для новичков, что все файлы, используемые в уроке, находятся в папке текущей темы..Если их там нет - создать..

ЗЫ..Здесь не любят разжевывать готовые решения, но обычно помогают всем, кто делает и ошибается..
Изучайте, эксперементируйте...
Что конкретно не понятно или не получается - спрашивайте, предварительно спросив у гугла..

Аватар пользователя drupby drupby 13 июня 2012 в 10:19

ещё http://drupalace.ru/login-registraciya-i-vosstanovlenie-parolya-s-pomosh...

"tyuirk" wrote:
Ну так давайте разберем хоть одно рабочее решение!)

берите , устанавливайте и разбирайте , если что то не получается - спрашивайте , а так вообще надо учиться искать информацию - сами видите , что её в интернетах полным полно ,
но если вам лень это делать , то почему другие должны за вас это делать ?

Аватар пользователя tyuirk tyuirk 13 июня 2012 в 11:40

"orion76" wrote:
Только автор данного урока забыл уточнить для новичков, что все файлы, используемые в уроке, находятся в папке текущей темы..Если их там нет - создать..

"drupby" wrote:
берите , устанавливайте и разбирайте , если что то не получается - спрашивайте , а так вообще надо учиться искать информацию - сами видите , что её в интернетах полным полно ,
но если вам лень это делать , то почему другие должны за вас это делать ?

Мне не лень уже месяц разобрать не могу это уже безысходность)

Аватар пользователя tyuirk tyuirk 13 июня 2012 в 12:10

"orion76" wrote:
Только автор данного урока забыл уточнить для новичков, что все файлы, используемые в уроке, находятся в папке текущей темы..Если их там нет - создать..

Вот именно это решение у меня не получается

Может подскажете где я допустил ошибку

Вот содержимое блока block--user--login.tpl.php

<?php

$elements 

drupal_get_form 'user_login_block' );

$rendered drupal_render $elements );

// to see what you have to work with
// print "<pre>ELEMENTS: " . print_r($elements,1) . "</pre>";

$output '<form action="' $elements '#action' ] .
'" method="' $elements '#method' ] .
'" id="' $elements '#id' ] .
'" accept-charset="UTF-8"><div>' ;

$output .= $elements 'name' ][ '#children' ];
$output .= $elements 'pass' ][ '#children' ];
$output .= $elements 'form_build_id' ][ '#children' ];
$output .= $elements 'form_id' ][ '#children' ];
$output .= $elements 'actions' ][ '#children' ];
$output .= $elements 'links' ][ '#children' ];
$output .= '</div></form>' ;

print 

$output ;
?> 

добавил такой код в page:

<?php if (isset($login_button)): ?>
  <?php print $login_button?>
<?php 
endif; ?>

js поключил через .info файл:

(function($) {
 
$(document).ready(function() {
 
  var login_block = $('#block-user-login');
  if (login_block.length > 0) {
 
    login_block.dialog({
      autoOpen: false,
      title: Drupal.t('Login'),
      resizable: false,
      maxWidth: 245,
      modal: true,
      show: "slide",
      hide: "explode"
    });
 
    $('.user-login').click(function() {
      login_block.dialog('open');
      return false;
    });
 
  }
});
 
})(jQuery);

в template.php добавил:

<?phpfunction имятемы_preprocess_page(&$vars) {
  global $user;
  if (!$user->uid && arg(0) != 'user') {
    drupal_add_library('system', 'ui.dialog');
    drupal_add_library('system', 'effects.explode');
    drupal_add_library('system', 'effects.slide');
    $vars['login_button'] = l(t('Login'), 'user', array('attributes' => array('class' => array('user-login'))));
  }
}?>

Выдает такую ошибку:
Fatal error: Cannot redeclare furcula_preprocess_page() (previously declared in W:\html\test\www\sites\all\themes\furcula\template.php:30) in W:\html\test\www\sites\all\themes\furcula\template.php on line 107

Аватар пользователя drupby drupby 13 июня 2012 в 12:14

"tyuirk" wrote:
Выдает такую ошибку:
Fatal error: Cannot redeclare furcula_preprocess_page() (previously declared

что то мне кажется , что у вас имятемы_preprocess_page уже было - надо их объединить

Аватар пользователя tyuirk tyuirk 13 июня 2012 в 12:32

"drupby" wrote:
что то мне кажется , что у вас имятемы_preprocess_page уже было - надо их объединить

Да нашел в template.php такую же функцию с этим именем. Как это сделать или можно найти альтернативный способ.

Аватар пользователя drupby drupby 13 июня 2012 в 12:48

"tyuirk" wrote:
Да нашел в template.php такую же функцию с этим именем. Как это сделать или можно найти альтернативный способ.

global $user;
  if (!$user->uid && arg(0) != 'user') {
    drupal_add_library('system', 'ui.dialog');
    drupal_add_library('system', 'effects.explode');
    drupal_add_library('system', 'effects.slide');
    $vars['login_button'] = l(t('Login'), 'user', array('attributes' => array('class' => array('user-login'))));
  }

вставить в существующую ф-цию

Аватар пользователя tyuirk tyuirk 13 июня 2012 в 13:14

да почистил

<?phpfunction имятемы_preprocess_page(&$vars) {
  if (isset($vars['main_menu'])) {
    $vars['main_menu'] = theme('links__system_main_menu', array(
      'links' => $vars['main_menu'],
      'attributes' => array(
        'class' => array('links', 'main-menu', 'clearfix'),
      ),
      'heading' => array(
        'text' => t('Main menu'),
        'level' => 'h2',
        'class' => array('element-invisible'),
      )
    ));
  }
  else {
    $vars['main_menu'] = FALSE;
  }
  if (isset($vars['secondary_menu'])) {
    $vars['secondary_menu'] = theme('links__system_secondary_menu', array(
      'links' => $vars['secondary_menu'],
      'attributes' => array(
        'class' => array('links', 'secondary-menu', 'clearfix'),
      ),
      'heading' => array(
        'text' => t('Secondary menu'),
        'level' => 'h2',
        'class' => array('element-invisible'),
      )
    ));
  }
  else {
    $vars['secondary_menu'] = FALSE;
  }
  global $user;
  if (!$user->uid && arg(0) != 'user') {
    drupal_add_library('system', 'ui.dialog');
    drupal_add_library('system', 'effects.explode');
    drupal_add_library('system', 'effects.slide');
    $vars['login_button'] = l(t('Login'), 'user', array('attributes' => array('class' => array('user-login'))));
  }
}?>
Аватар пользователя drupby drupby 13 июня 2012 в 13:18

"tyuirk" wrote:
drupal_add_library('system', 'ui.dialog');
    drupal_add_library('system', 'effects.explode');
    drupal_add_library('system', 'effects.slide');

а скрипты эти в исходном коде подключились ?(в теге <head></head>)
если включена аггрегация скриптов попробуй выключить.

Аватар пользователя Orion76 Orion76 13 июня 2012 в 13:23

"tyuirk" wrote:
js поключил через .info файл:

И про этот момент поподробнее...
А если есть возможность ссылку на сайт дать, или хотя бы исходный код страницы здесь выложить(файл к сообщения приаттачить) - было бы совсем здорово..

Аватар пользователя drupby drupby 13 июня 2012 в 13:30

"orion76" wrote:
js поключил через .info файл:
И про этот момент поподробнее...

так опять таки в исходном коде страницы виден будет , если подключился.

Аватар пользователя tyuirk tyuirk 13 июня 2012 в 13:32

"drupby" wrote:
а скрипты эти в исходном коде подключились ?(в теге )
если включена аггрегация скриптов попробуй выключить.

в heade не видно , и агрегация не стоит

Аватар пользователя tyuirk tyuirk 13 июня 2012 в 13:37

"drupby" wrote:
так опять таки в исходном коде страницы виден будет , если подключился.

js подключился, а этих не видать drupal_add_library('system', 'ui.dialog');
drupal_add_library('system', 'effects.explode');
drupal_add_library('system', 'effects.slide');

Аватар пользователя tyuirk tyuirk 13 июня 2012 в 13:39

"orion76" wrote:
А если есть возможность ссылку на сайт дать, или хотя бы исходный код страницы здесь выложить

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

Аватар пользователя tyuirk tyuirk 13 июня 2012 в 13:46

"drupby" wrote:
так а ты хоть от анонима заходишь на страницу?

Нет конечно ) затупил, теперь вижу что подключились.

Аватар пользователя tyuirk tyuirk 13 июня 2012 в 15:07

"drupby" wrote:

а само окно всплывает ?


В том и дело что оно в contente как обычное отурывается
"drupby" wrote:
да поставь Ajax Login/Register и выведи блок с ссылкой куда нужно

хотелось бы обойтись без модулей

Аватар пользователя drupby drupby 13 июня 2012 в 15:26

"tyuirk" wrote:
хотелось бы обойтись без модулей

модуль лучше - там из формы входа можно перейти в форму регистрации или форму восстановления всё в том же модальном окне , а при такой реализации сразу же перебросит на обычную страницу
посмотри демо модуля и сравни с выводом кнопки

Аватар пользователя Orion76 Orion76 13 июня 2012 в 15:31

"drupby" wrote:
js поключил через .info файл:
И про этот момент поподробнее...

Я имел ввиду не в тема.info ли был вставлен код скрипта...
Или может с путями к файлу что...

похоже именно он и не отрабатывает...

Аватар пользователя tyuirk tyuirk 13 июня 2012 в 15:32

Модуль уже посмотрел, здесь уже наверное дело принципа столько времени потрачено, а результата нет (

Аватар пользователя tyuirk tyuirk 13 июня 2012 в 15:37

"orion76" wrote:
Я имел ввиду не в тема.info ли был вставлен код скрипта...
Или может с путями к файлу что...

похоже именно он и не отрабатывает...


В инфо прописал scripts[] = js/theme.js

Аватар пользователя Orion76 Orion76 13 июня 2012 в 16:00

и кстати, для семерки... theme.js правильнее будет:

(function($) {

        Drupal.behaviors.UserLoginAjaxBlock = {
                attach: function() {
                        var login_block = $('#block-user-login');
                        if (login_block.length > 0) {
 
                                login_block.dialog({
                                        autoOpen: false,
                                        title: Drupal.t('Login'),
                                        resizable: false,
                                        maxWidth: 245,
                                        modal: true,
                                        show: "slide",
                                        hide: "explode"
                                });
 
                                $('.user-login').click(function() {
                                        login_block.dialog('open');
                                        return false;
                                });
 
                        }
                }
        }
})(jQuery);

Аватар пользователя tyuirk tyuirk 13 июня 2012 в 16:07

"orion76" wrote:
можно кусок кода формы + обрамляющие ее 3-4 тега?

<aside class="sidebar clearfix" role="complementary" id="sidebar-second">
      <div class="region region-sidebar-second">
  <form accept-charset="UTF-8" id="user-login-form" method="post" action="/node?destination=node"><div><div class="form-item form-type-textfield form-item-name">
  <label for="edit-name--2">Имя пользователя <span title="Обязательное поле" class="form-required">*</span></label>
 <input type="text" class="form-text required" maxlength="60" size="15" value="" name="name" id="edit-name--2">
</div>
<div class="form-item form-type-password form-item-pass">
  <label for="edit-pass--2">Пароль <span title="Обязательное поле" class="form-required">*</span></label>
 <input type="password" class="form-text required" maxlength="60" size="15" name="pass" id="edit-pass--2">
</div>
<input type="hidden" value="form-BYVG6LNtXABDwRdrdzyLMzx4bwRHT4jRcrUTlPKnPc0" name="form_build_id">
<input type="hidden" value="user_login_block" name="form_id">
<div id="edit-actions--3" class="form-actions form-wrapper"><input type="submit" class="form-submit" value="Вход" name="op" id="edit-submit--3"></div><div class="item-list"><ul><li class="first"><a title="Создать новую учетную запись пользователя." href="/user/register">Регистрация</a></li>
<li class="last"><a title="Запросить новый пароль по электронной почте." href="/user/password">Забыли пароль?</a></li>
</ul></div></div></form> </div>
 <!-- /.region -->
    </aside>
Аватар пользователя drupby drupby 13 июня 2012 в 16:21

"tyuirk" wrote:
<?php

$elements = drupal_get_form ( 'user_login_block' );

$rendered = drupal_render ( $elements );

// to see what you have to work with
// print "

ELEMENTS: " . print_r($elements,1) . "

";

$output = '

' ;

$output .= $elements [ 'name' ][ '#children' ];
$output .= $elements [ 'pass' ][ '#children' ];
$output .= $elements [ 'form_build_id' ][ '#children' ];
$output .= $elements [ 'form_id' ][ '#children' ];
$output .= $elements [ 'actions' ][ '#children' ];
$output .= $elements [ 'links' ][ '#children' ];
$output .= '

' ;

print $output ;
?> 

<?php

$elements = drupal_get_form ( 'user_login_block' );

$rendered = drupal_render ( $elements );

// to see what you have to work with
// print "<pre>ELEMENTS: " . print_r($elements,1) . "</pre>";

$output = '<div id="block-user-login"><form action="' . $elements [ '#action' ] .
'" method="' . $elements [ '#method' ] .
'" id="' . $elements [ '#id' ] .
'" accept-charset="UTF-8"><div>' ;

$output .= $elements [ 'name' ][ '#children' ];
$output .= $elements [ 'pass' ][ '#children' ];
$output .= $elements [ 'form_build_id' ][ '#children' ];
$output .= $elements [ 'form_id' ][ '#children' ];
$output .= $elements [ 'actions' ][ '#children' ];
$output .= $elements [ 'links' ][ '#children' ];
$output .= '</div></form></div>' ;

print $output ;
?> 

Аватар пользователя kavabatich kavabatich 19 октября 2012 в 11:41

tyuirk везет же Вам. А мне чего то orion76 не помогает. Не знаю по какой причине. Мы проплатили ему деньги месяц назад. А скрипт, который он сделал не работает. И он больше не подходит не на письма, не на мобильник. Мы готов даже добавить скинуться на пиво, можно, бельгийское но хочется что бы orion76 выполнил обязательство. Хотя бы скоментировал бы код. Простите за офтоп.