Всем привет! Нужна помощь, использовал для login во всплывающем окне. Все сделал как написано в первом посте, но в итоге получаю такую ошибку
Notice: Undefined variable: login_button в функции include() (строка 12 в файле /home/navros/k/sites/all/themes/bluemasters/page.tpl.php).
Комментарии
сама статья
Не работает 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'))));?>
так как правильно и может ли это быть проблемой?
если у Вас
function ИМЯТЕМЫ_preprocess_page(&$vars)
то используйте $vars['login_button']
а если ИМЯТЕМЫ_preprocess_page(&$variables)
то, соответственно, используйте $variables['login_button']
и так и этак одна и та же ошибка. А возможно ли такое, что я скрипт неправильно подключаю? как правильно прописать подключение скрипта в файле НАЗВАНИЕ_ТЕМЫ.info? если файл скрипта лежит лежит в папке js шаблона
это никак не касается скрипта
в ИМЯТЕМЫ нет ошибки?
кэш сбросили?
Прописал function BLUEMASTERS_preprocess_page(&$vars)
Кэш сбрасывал(((
не хочу ни в коем случае обидеть, но на всякий случай - Вы кэш Drupal'a сбрасываете?
какие обиды?)) конечно сбрасываю через Настройки-Производительность-Сбросить кэш. Может какой модуль еще надо подключить? и сильно сомневаюсь что я правильно прописываю подключение скрипта
А как сие в page.tpl.php прописано? Там как минимум должно быть ограничение на вывод только при наличии самой переменной, ибо для зарегистрированных пользователей действительно эта переменная будет не определена(в Вашем случае так оно и есть). И работает ли само модальное окно, или просто это уведомление беспокоит?
это как? можно поподробнее?
как у него может работать модальное окно, если у него линк не выводится с классом, к которому скрипт цепляется???
Значит так, линк выводится, когда захожу как Гость, но модальное окно не выводится, а срабатывает стандартная форма /user. Сообщение об ошибке описанной мною появляется когда я уже зешкл как администратор.
Подключение сурипта пытаюсь сделать через файл НАЗВАНИЕ_ТЕМЫ.info, как описано в этой статье. Файл скрипта закинул в папку js в моем шаблоне. А в файле *.info прописываю scripts[] = js/скрипт.js
а..., елки-палки, всем приношу извинения, был невнимателен к статье.
да как нефиг, ибо линк выводится только у анонимов, а у всех остальных будет этот нотис.
наверное обращали внимание, что обычно в шаблонах пишется не просто
<?php print $item;?> а именно <?php if(isset($item)) print $item; ?> как раз, для того, чтобы избежать этих нотисов.
значит препроцесс в template.php работает
наиболее вероятно, что не срабатывает js по какой-то причине
это то, о чем я говорил выше
Вот так надо выводить в page.tpl.php, чтобы не было ошибки
<?php if (isset($login_button) : ?>
<?php print $login_button; ?>
<?php endif; ?>
Попробую, а как быть с подклюяением скрипта?
sg85, см выше - принес извинения, мельком в код статьи глянул, не заметил там if в препроцессе и голого вывода потом в шаблоне.
стоп, скобку пропустил
<?php if (isset($login_button)) : ?>
<?php print $login_button; ?>
<?php endif; ?>
Зачем он Вам в инфо файле? Будет болтаться на каждой странице для всех. Подключите в template.php
после drupal_add_library('system', 'ui.dialog');
drupal_add_js(drupal_get_path('theme', 'имяТемы') . '/js/скрипт.js');
это не тот кеш
нужно сбрасывать кеш тем, самый простой способ - Оформление > Сохранить настройки
ну или с помощью Admin menu
в 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');
} ?>
в чем косяк?
скобки кто за собой закрывать будет?
Простите, а где имено и аакие? Я в этом не понимаю
А что тут понимать? Любая открытая скобка должна быть закрыта. В вашей последнем коде не закрыт IF, и сама функция, т.е. не хватает даже 2х скобок }
исправил, теперь код такой
<?php
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
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, ошибок никаких не выдает. как быть?
У вас этот участок
болтается как не пришей к... рукав, верните его обратно в тело функции иначе этот код будет отрабатываться при подключении темы, а это вещь довольно непредсказуемая.
Убедитесь через фаербаг, что в хедере вашей страницы присутствует подключение вашего файла js и что эта ссылка не битая(например в хроме, тыкаете на страницу правой кнопкой мыши в любом месте окна, исследовать элемент, снизу появится некая хреновина, в ней колесиком мыши прокручиваете на самый верх, находите тег
<head>
, нажимаете левой кнопкой мыши на стрелочку рядом с этим тегом, и ищите тег<script type="text/javascript" src= "путь к вашему js файлу">...
, далее если не находите его, значит он не подключился, если нашли, нажимаете на адрес в src и если открылся файл, значит ошибка в самом js файле, а если выдает ошибку файл не найден - значит при подклчении файла указан не верный адрес до него)Ах да, при этих манипуляциях в настройках производительности сайта обязательно должно быть отключено сжатие js
http://drupal.org/project/popup я использовал этот модуль. Возможно тебе подойдет.
спасибо, возможно и подойдет, только уже надо это добить)))
как это должно выглядить? куда его написать?
<?php
}$vars['login_button'] = l(t('Login'), 'user', array('attributes' => array('class' => array('user-login'))));
} //вписать сюда }
?>
посмотрел, как Вы указали, нет там моего скрипта, пытаюсь подключить через 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');
}
}
?>
Именно на главной смотрите?
вот скрины
почему Вы изменили строку
<?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');
?>
??
сейчас исправлю
Исправил. Результат тот же, скрипт не срабатывает((((
он не срабатывает или не подключается? Проверять надо под анонимусом и еще одна важная деталь (если скрипт подключился) - на этой странице должен выводится блок с формой авторизации.
На последнем скрине путь вроде бы верный, сам файл то точно присутствует по тому адресу? мышкой по нему клацать пробовали? ошибок не выдает? Если не выдает, значит проблема в самом js файле
я так понимаю, что не подключается, потому ошибок нет, и в коде страницы (вверху два скрина) его нет
простите, а где Вы его увидели? мой скрипт login.js
это очень странно, учитывая, что bluemasters.js прописанный в той же функции тем же способом подключается
сбросьте кэш, перезагрузите страницу и проверьте еще раз, при этом не забудьте разлогиниться
уже это все перепробывал, раз 20)))) видимо не судьба, эх
перепутал его с bluemasters. Вы это дело точно под анонимом смотрите?
так точно
зашел через firefox на сайт, и нажал исследовать элемент, и о чудо
Через Chrome тоже показывает такую же строку теперь, как и в firefox на скрине (поставил модуль popup)
Кеш браузера при работе с версткой нужно постоянно сбрасывать, в хроме достаточно ткнуть F5 на закешированной странице
сделал, открылся сам файл (т.е. я сейчас вижу код файла в браузере), ошибок не выдал
Если при всем при этом не работает так, как нужно, значит проблемы остались в самом js
а теперь магия. включите на этой странице показ блока с формой авторизации в admin/structure/block
работает)))) Ребята, спасибо Вам!!!))) И не сочтите за грубость, как это дело прикрутить к менюшке? То бишь, у меня в меню есть ссылка "Вход" с адресом /user, как заставить чтобы открывалось это popup окно?
самое простое, ставите модуль http://drupal.org/project/menu_attributes
и для нужного пункта меню прописываете в графе class
user-login
Подскажите, а как теперь эту ссылку в меню, сделать невидимой когда пользователь уже зашел, а вместо него должна появиться кнопка "выход"? Заранее спасибо:)