login через poPup окно

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

Аватар пользователя takosan takosan 4 ноября 2012 в 21:53

Всем привет! Нужна помощь, использовал для login во всплывающем окне. Все сделал как написано в первом посте, но в итоге получаю такую ошибку

Notice: Undefined variable: login_button в функции include() (строка 12 в файле /home/navros/k/sites/all/themes/bluemasters/page.tpl.php).

Комментарии

Аватар пользователя takosan takosan 4 ноября 2012 в 22:20

"boatsman" wrote:
Не работает preprocess функция (не определяет $vars['login_button']).
Еще раз все проверьте и сбросьте кэш.

В статье написано, что нужно в template.php вставить такой код

<?phpfunction ИМЯТЕМЫ_preprocess_page(&$vars) {
  global $user;
  // Подключаем библиотеку только для анонимов
  if (!$user->uid) {
    drupal_add_library('system', 'ui.dialog');
    // Добавляем ссылку, при нажатии на которую будет показываться логин
    $vars['login_button'] = l(t('Login'), 'user', array('attributes' => array('class' => array('user-login'))));
  }
}?>

а ниже в комментах пишут что вместо
<?php$vars['login_button'] = l(t('Login'), 'user', array('attributes' => array('class' => array('user-login'))));?>
надо

<?php // Добавляем ссылку, при нажатии на которую будет показываться логин
    
$variables['login_button'] = l(t('Login'), 'user', array('attributes' => array('class' => array('user-login'))));?>

так как правильно и может ли это быть проблемой?

Аватар пользователя boatsman boatsman 4 ноября 2012 в 22:50

если у Вас

function ИМЯТЕМЫ_preprocess_page(&$vars)

то используйте $vars['login_button']

а если ИМЯТЕМЫ_preprocess_page(&$variables)

то, соответственно, используйте $variables['login_button']

Аватар пользователя takosan takosan 4 ноября 2012 в 23:27

"boatsman" wrote:

если у Вас
function ИМЯТЕМЫ_preprocess_page(&$vars)
то используйте $vars['login_button']
а если ИМЯТЕМЫ_preprocess_page(&$variables)
то, соответственно, используйте $variables['login_button']

и так и этак одна и та же ошибка. А возможно ли такое, что я скрипт неправильно подключаю? как правильно прописать подключение скрипта в файле НАЗВАНИЕ_ТЕМЫ.info? если файл скрипта лежит лежит в папке js шаблона

Аватар пользователя takosan takosan 4 ноября 2012 в 23:43

"boatsman" wrote:
это никак не касается скрипта
в ИМЯТЕМЫ нет ошибки?
кэш сбросили?

Прописал function BLUEMASTERS_preprocess_page(&$vars)
Кэш сбрасывал(((

Аватар пользователя takosan takosan 5 ноября 2012 в 1:36

"boatsman" wrote:
не хочу ни в коем случае обидеть, но на всякий случай - Вы кэш Drupal'a сбрасываете?

какие обиды?)) конечно сбрасываю через Настройки-Производительность-Сбросить кэш. Может какой модуль еще надо подключить? и сильно сомневаюсь что я правильно прописываю подключение скрипта

Аватар пользователя sg85 sg85 5 ноября 2012 в 1:45

А как сие в page.tpl.php прописано? Там как минимум должно быть ограничение на вывод только при наличии самой переменной, ибо для зарегистрированных пользователей действительно эта переменная будет не определена(в Вашем случае так оно и есть). И работает ли само модальное окно, или просто это уведомление беспокоит?

Аватар пользователя boatsman boatsman 5 ноября 2012 в 1:54

"sg85" wrote:
Там как минимум должно быть ограничение на вывод только при наличии самой переменной, ибо для зарегистрированных пользователей действительно эта переменная будет не определена(в Вашем случае так оно и есть).

это как? можно поподробнее?

"sg85" wrote:
И работает ли само модальное окно, или просто это уведомление беспокоит?

как у него может работать модальное окно, если у него линк не выводится с классом, к которому скрипт цепляется???

Аватар пользователя takosan takosan 5 ноября 2012 в 2:05

Значит так, линк выводится, когда захожу как Гость, но модальное окно не выводится, а срабатывает стандартная форма /user. Сообщение об ошибке описанной мною появляется когда я уже зешкл как администратор.

Подключение сурипта пытаюсь сделать через файл НАЗВАНИЕ_ТЕМЫ.info, как описано в этой статье. Файл скрипта закинул в папку js в моем шаблоне. А в файле *.info прописываю scripts[] = js/скрипт.js

Аватар пользователя sg85 sg85 5 ноября 2012 в 2:04

"boatsman" wrote:
как у него может работать модальное окно, если у него линк не выводится с классом, к которому скрипт цепляется???

да как нефиг, ибо линк выводится только у анонимов, а у всех остальных будет этот нотис.

"boatsman" wrote:
это как? можно поподробнее?

наверное обращали внимание, что обычно в шаблонах пишется не просто
<?php print $item;?> а именно <?php if(isset($item)) print $item; ?> как раз, для того, чтобы избежать этих нотисов.

"takosan" wrote:
Значит так, линк выводится,

значит препроцесс в template.php работает

"takosan" wrote:
но модальное окно не выводится, а срабатывает стандартная форма /user.

наиболее вероятно, что не срабатывает js по какой-то причине

"takosan" wrote:
Сообщение об ошибке описанной мною появляется когда я уже зешкл как администратор.

это то, о чем я говорил выше

Аватар пользователя takosan takosan 5 ноября 2012 в 2:09

"boatsman" wrote:
Вот так надо выводить в page.tpl.php, чтобы не было ошибки
<?php if (isset($login_button) : ?>
<?php print $login_button; ?>
<?php endif; ?>

Попробую, а как быть с подклюяением скрипта?

Аватар пользователя boatsman boatsman 5 ноября 2012 в 2:09

sg85, см выше - принес извинения, мельком в код статьи глянул, не заметил там if в препроцессе и голого вывода потом в шаблоне. Smile

Аватар пользователя boatsman boatsman 5 ноября 2012 в 2:11

"takosan" wrote:
Попробую, а как быть с подклюяением скрипта?

стоп, скобку пропустил

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

Аватар пользователя boatsman boatsman 5 ноября 2012 в 2:19

Зачем он Вам в инфо файле? Будет болтаться на каждой странице для всех. Подключите в template.php

после drupal_add_library('system', 'ui.dialog');

drupal_add_js(drupal_get_path('theme', 'имяТемы') . '/js/скрипт.js');

Аватар пользователя Andruxa Andruxa 5 ноября 2012 в 3:27

"takosan" wrote:
сбрасываю через Настройки-Производительность-Сбросить кэш

это не тот кеш
нужно сбрасывать кеш тем, самый простой способ - Оформление > Сохранить настройки

ну или с помощью Admin menu

Аватар пользователя takosan takosan 5 ноября 2012 в 12:27

в template.php, вставил такой код

<?phpfunction BLUEMASTERS_preprocess_page(&$vars) {
    global $user;
    // Подключаем библиотеку только для анонимов
    if (!$user->uid) {
    drupal_add_library('system', 'ui.dialog');
    drupal_add_js(drupal_get_path('theme', 'bluemasters') . '/js/login.js');
    // Добавляем ссылку, при нажатии на которую будет показываться логин
    $vars['login_button'] = l(t('Login'), 'user', array('attributes' => array('class' => array('user-login'))));?>

и в итоге получил ошибку когда нажал выйти из учетной записи.
Parse error: syntax error, unexpected $end in /home/navros/k/sites/all/themes/bluemasters/template.php on line 23

Добавлю, что изначально файл template.php выглядил так

<?php 

/**
 * Add javascript files for front-page jquery slideshow.
 */
if (drupal_is_front_page()) {
drupal_add_js(drupal_get_path('theme''bluemasters') . '/js/bluemasters.js');
}

?>

с моим кодом стал выглядить так

<?php 

    

function BLUEMASTERS_preprocess_page(&$vars) {
    global 
$user;
    
// Подключаем библиотеку только для анонимов
    
if (!$user->uid) {
    
drupal_add_library('system''ui.dialog');
    
drupal_add_js(drupal_get_path('theme''bluemasters') . '/js/login.js');
    
// Добавляем ссылку, при нажатии на которую будет показываться логин
    
$vars['login_button'] = l(t('Login'), 'user', array('attributes' => array('class' => array('user-login'))));

/**
 * Add javascript files for front-page jquery slideshow.
 */
if (drupal_is_front_page()) {
drupal_add_js(drupal_get_path('theme''bluemasters') . '/js/bluemasters.js');
}

?>

в чем косяк?

Аватар пользователя sg85 sg85 5 ноября 2012 в 17:26

"takosan" wrote:
Parse error: syntax error, unexpected $end in /home/navros/k/sites/all/themes/bluemasters/template.php on line 23

скобки кто за собой закрывать будет?

Аватар пользователя sg85 sg85 5 ноября 2012 в 18:25

"takosan" wrote:
Простите, а где имено и аакие? Я в этом не понимаю

А что тут понимать? Любая открытая скобка должна быть закрыта. В вашей последнем коде не закрыт IF, и сама функция, т.е. не хватает даже 2х скобок }

Аватар пользователя takosan takosan 5 ноября 2012 в 22:14

исправил, теперь код такой

<?php 

    

<?phpfunction bluemasters_preprocess_page(&$vars) {
    global 
$user;
    
// Подключаем библиотеку только для анонимов
    
if (!$user->uid) {
    
drupal_add_library('system''ui.dialog');
    
drupal_add_js(drupal_get_path('theme''bluemasters') . '/js/login.js');
    
// Добавляем ссылку, при нажатии на которую будет показываться логин
    
$vars['login_button'] = l(t('Login'), 'user', array('attributes' => array('class' => array('user-login'))));
  }
}
?>

/**
 * Add javascript files for front-page jquery slideshow.
 */
if (drupal_is_front_page()) {
drupal_add_js(drupal_get_path('theme', 'bluemasters') . '/js/bluemasters.js');
}

?>

обновляю страницу, и получаю
Parse error: syntax error, unexpected '<' in /home/navros/k/sites/all/themes/bluemasters/template.php on line 5

P.S. разобрался, лишние <?php и ?>, теперь код такой

<?php 

    

function bluemasters_preprocess_page(&$vars) {
    global 
$user;
    
// Подключаем библиотеку только для анонимов
    
if (!$user->uid) {
    
drupal_add_library('system''ui.dialog');
    
drupal_add_js(drupal_get_path('theme''bluemasters') . '/js/login.js');
    
// Добавляем ссылку, при нажатии на которую будет показываться логин
    
$vars['login_button'] = l(t('Login'), 'user', array('attributes' => array('class' => array('user-login'))));
  }
}

/**
 * Add javascript files for front-page jquery slideshow.
 */
if (drupal_is_front_page()) {
drupal_add_js(drupal_get_path('theme''bluemasters') . '/js/bluemasters.js');
}

?>

но собака все равно не работает, кнопка "login" появилась, при нажатии отправляет на стандартную страницу user, ошибок никаких не выдает. как быть?

Аватар пользователя sg85 sg85 6 ноября 2012 в 0:58

У вас этот участок

"takosan" wrote:
if (drupal_is_front_page()) {
drupal_add_js(drupal_get_path('theme', 'bluemasters') . '/js/bluemasters.js');
}

болтается как не пришей к... рукав, верните его обратно в тело функции иначе этот код будет отрабатываться при подключении темы, а это вещь довольно непредсказуемая.
Убедитесь через фаербаг, что в хедере вашей страницы присутствует подключение вашего файла js и что эта ссылка не битая(например в хроме, тыкаете на страницу правой кнопкой мыши в любом месте окна, исследовать элемент, снизу появится некая хреновина, в ней колесиком мыши прокручиваете на самый верх, находите тег <head>, нажимаете левой кнопкой мыши на стрелочку рядом с этим тегом, и ищите тег <script type="text/javascript" src= "путь к вашему js файлу">..., далее если не находите его, значит он не подключился, если нашли, нажимаете на адрес в src и если открылся файл, значит ошибка в самом js файле, а если выдает ошибку файл не найден - значит при подклчении файла указан не верный адрес до него)

Аватар пользователя sg85 sg85 6 ноября 2012 в 0:59

Ах да, при этих манипуляциях в настройках производительности сайта обязательно должно быть отключено сжатие js

Аватар пользователя takosan takosan 6 ноября 2012 в 6:53

"Photoshopper" wrote:
http://drupal.org/project/popup я использовал этот модуль. Возможно тебе подойдет.

спасибо, возможно и подойдет, только уже надо это добить)))
"sg85" wrote:
У вас этот участок
"takosan" написал(а):
if (drupal_is_front_page()) {
drupal_add_js(drupal_get_path('theme', 'bluemasters') . '/js/bluemasters.js');
}
болтается как не пришей к... рукав, верните его обратно в тело функции

как это должно выглядить? куда его написать?

Аватар пользователя takosan takosan 6 ноября 2012 в 16:53

"sg85" wrote:
болтается как не пришей к... рукав, верните его обратно в тело функции иначе этот код будет отрабатываться при подключении темы, а это вещь довольно непредсказуемая.
Убедитесь через фаербаг, что в хедере вашей страницы присутствует подключение вашего файла js и что эта ссылка не битая(например в хроме, тыкаете на страницу правой кнопкой мыши в любом месте окна, исследовать элемент, снизу появится некая хреновина, в ней колесиком мыши прокручиваете на самый верх, находите тег , нажимаете левой кнопкой мыши на стрелочку рядом с этим тегом, и ищите тег ..., далее если не находите его, значит он не подключился, если нашли, нажимаете на адрес в src и если открылся файл, значит ошибка в самом js файле, а если выдает ошибку файл не найден - значит при подклчении файла указан не верный адрес до него)

посмотрел, как Вы указали, нет там моего скрипта, пытаюсь подключить через template.php, код файла

<?php

function bluemasters_preprocess_page(&$variables) {
global $user;
// Подключаем библиотеку только для анонимов
if (!$user->uid) {
drupal_add_library('system', 'ui.dialog');
drupal_add_js(drupal_get_path('theme', 'bluemasters') . 'http://k.navros.ru/sites/all/themes/bluemasters/js/login.js');
// Добавляем ссылку, при нажатии на которую будет показываться логин
$variables['login_button'] = l(t('Login'), 'user', array('attributes' => array('class' => array('user-login'))));
}
/**
* Add javascript files for front-page jquery slideshow.
*/
if (drupal_is_front_page()) {
drupal_add_js(drupal_get_path('theme', 'bluemasters') . '/js/bluemasters.js');
}
}
?>

Аватар пользователя boatsman boatsman 6 ноября 2012 в 17:34

почему Вы изменили строку

<?php
drupal_add_js
(drupal_get_path('theme''bluemasters') . '/js/login.js');
?>

на

<?php
drupal_add_js
(drupal_get_path('theme''bluemasters') . 'http://k.navros.ru/sites/all/themes/bluemasters/js/login.js');
?>

??

Аватар пользователя takosan takosan 6 ноября 2012 в 18:03

"boatsman" wrote:
почему Вы изменили строку

сейчас исправлю

Исправил. Результат тот же, скрипт не срабатывает((((

Аватар пользователя boatsman boatsman 6 ноября 2012 в 18:10

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

Аватар пользователя sg85 sg85 6 ноября 2012 в 18:09

На последнем скрине путь вроде бы верный, сам файл то точно присутствует по тому адресу? мышкой по нему клацать пробовали? ошибок не выдает? Если не выдает, значит проблема в самом js файле

Аватар пользователя takosan takosan 6 ноября 2012 в 18:12

"boatsman" wrote:

я так понимаю, что не подключается, потому ошибок нет, и в коде страницы (вверху два скрина) его нет

"sg85" wrote:
На последнем скрине путь вроде бы верный, сам файл то точно присутствует по тому адресу? мышкой по нему клацать пробовали? ошибок не выдает? Если не выдает, значит проблема в самом js файле

простите, а где Вы его увидели? мой скрипт login.js

Аватар пользователя takosan takosan 6 ноября 2012 в 18:16

"boatsman" wrote:
он не срабатывает или не подключается? Проверять надо под анонимусом и еще одна важная деталь (если скрипт подключился) - на этой странице должен выводится блок с формой авторизации.

уже это все перепробывал, раз 20)))) видимо не судьба, эх

Аватар пользователя sg85 sg85 6 ноября 2012 в 18:18

"takosan" wrote:
простите, а где Вы его увидели? мой скрипт login.js

перепутал его с bluemasters. Вы это дело точно под анонимом смотрите?

Аватар пользователя takosan takosan 10 ноября 2015 в 11:48

зашел через firefox на сайт, и нажал исследовать элемент, и о чудо

Через Chrome тоже показывает такую же строку теперь, как и в firefox на скрине (поставил модуль popup)

Аватар пользователя sg85 sg85 6 ноября 2012 в 18:30

Кеш браузера при работе с версткой нужно постоянно сбрасывать, в хроме достаточно ткнуть F5 на закешированной странице

Аватар пользователя takosan takosan 6 ноября 2012 в 18:34

"sg85" wrote:
далее если не находите его, значит он не подключился, если нашли, нажимаете на адрес в src и если открылся файл, значит ошибка в самом js файле, а если выдает ошибку файл не найден - значит при подклчении файла указан не верный адрес до него)

сделал, открылся сам файл (т.е. я сейчас вижу код файла в браузере), ошибок не выдал

Аватар пользователя takosan takosan 6 ноября 2012 в 19:06

"boatsman" wrote:
а теперь магия. Smile включите на этой странице показ блока с формой авторизации в admin/structure/block

работает)))) Ребята, спасибо Вам!!!))) И не сочтите за грубость, как это дело прикрутить к менюшке? То бишь, у меня в меню есть ссылка "Вход" с адресом /user, как заставить чтобы открывалось это popup окно?

Аватар пользователя aaa-86 aaa-86 5 января 2013 в 10:22

Подскажите, а как теперь эту ссылку в меню, сделать невидимой когда пользователь уже зашел, а вместо него должна появиться кнопка "выход"? Заранее спасибо:)