Всем ку!
Скажу заранее в PHP я не силён, переделать могу, но не написать.
Хочу создать свой модуль, типа scroll to top. Основа у меня есть, то биш js и css файлики. Как мне это всё дело приделать в друпал как модуль? Можно без настроек, тупо включил и готово.
И хотелось бы чтобы в админке (admin/*) он не работал.
Если захотите написать: "Иди учи PHP" то лучше ничего не пишите. Мне надо то на 1 раз, то каждый раз руками его приделывать неудобно.
Комментарии
Эти знаю и использую.
Вроде почитал, но не совсем понял: получается в эту функцию и прописываю добавление js и css, но там какие-то переменные, и как мне указать где именно будут подключатся эти фалы?
hook_library
[module=scroll_to_top] или [module=back_to_top]
Да, да, я в курсе что можно у них код посмотреть. Но там же есть куча настроек и т.д. Так что я отчасти понял только и навряд ли мне это поможет.
Почитав, я понял что это то что нужно.
HTML код нужный для модуля я передам в js файле через аппенд.
CSS файл можно подключить через .info, значит остается только прикрутить js.
Надо поспать и написать эти несчастные пару строк, мб всё заработает с первого раза)
Как я понимаю, hook_library включится тут же как я включу модуль?
Ещё вопрос, какой if нужен чтобы для админки не работало? в admin/* ?
нет - он вызывается drupal_add_library() и при этом библиотека содержит все css и js файлы
Я подключая свои файлы так: https://api.drupal.org/api/drupal/modules!system!system.api.php/function...
Затем этим https://api.drupal.org/api/drupal/includes!common.inc/function/drupal_ad... я каким то макаром должен вызвать hook_library? Как? В этой функции я вообще ничего не понял(
Так? drupal_add_library(module, mymodule, $every_page = NULL) - евери пейд... я не знаю как указать на все страницы, или там на страницы определённой темы.
* Implements hook_library().
*/
function mymodule_library() {
$path = drupal_get_path('module', 'mymodule');
$libraries['mylibrary'] = array(
'title' => 'Mylibrary',
'website' => 'http://drupal.ru',
'version' => '1.0',
'js' => array(
$path . '/myscript1.js' => array(),
$path . '/myscript2.js' => array(),
),
'css' => array(
$path . '/mystyle1.css' => array(),
$path . '/mystyle2.css' => array(),
),
);
return $libraries;
}
/**
* Implements hook_init().
*/
function mymodule_init() {
drupal_add_library('mymodule', 'mylibrary');
}
оберни drupal_add_library в нужное тебе условие , если нужно подключить на определенных страницах
если нужно для определенной темы то добавляй в template.php своей темы
Хуки не надо вызывать. Если вы всё написали правильно - они сами вызываются. Вот ознакомься по хукам.
а с чего бы это функции-имплементации hook_library самой вызываться без вызова drupal_add_library ?
Да, в данном случае ты прав.
Не работал с этим хуком ранее.
В общем вот встречайте модуль "Line to top": https://dl.dropboxusercontent.com/u/17036541/line_to_top.tar.gz
1) 3 стадии подсветки линии. Сама линия начинает подсвечиваться, если курсор приближается к левому краю за 200px (смотрим пункт 4) (как в ВК, только у них всё хитрее и ширина меняется)
2) Модуль, не работает в админке, он там мешается. Во всяком случае у меня всё нормально. Нужны тесты на разных хостингах.
3) Если на сайт зашли с планшета или телефона, то полоса прокрутки отключается. Она там не к месту.
4) Не использовать с резиновыми шаблонами, так как свободного места слева должно быть от 100px до 200px (Смотрим комменты в CSS).
Почему то выпадает ошибка: [function.file-get-contents] хотя всё работает.
За подсказки и тесты буду благодарен. Это мой первый модуль на дру. Всем огромное СПС, кто помогал.
Я перезалил модуль (ссылка та же): https://dl.dropboxusercontent.com/u/17036541/line_to_top.tar.gz
Исправлено:
Теперь и в overlay скрол не работает. Там он тоже нафиг не сдался.
Убрал ошибку, которая выскакивала.