OBEC POCTE
NEVSEREMOS'!

Оцінка користувачів: 2 / 5

Активна зіркаАктивна зіркаНеактивна зіркаНеактивна зіркаНеактивна зірка
 
Увага! Стаття не актуальна, оскільки з'явився плагін AjaxModuleLoader. Лишаю статтю в освітніх цілях.

У-ха-ха! Ха! Я павук!Задача: Завантажувати певні модулі на сторінці лише після того, як сторінка вцілому завантажилась. Мати можливість перевантажувати певні модулі періодично (наприклад модуль з рахунком матчу).

Мати можливість використовувати як mootools, так і jquery.

Пояснення: Сайт переобтяжений модулями, через що сторінка вантажиться досить довго. Хочеться швидко завантажити основне, а різні додаткові модулі вантажити вже після завантаження сторінки.

Обмеження: Не буде праюцвати для деяких модулів, що самі по собі активно використовують javascript. Конфлікт помічений для модуля mod_jreviews_listings

Приклад з разовим завантаженням

Приклад з періодичним перевантаженням з вказанням інтервалу в 60 секунд

Вирішення.

  • Згенерувати на сайті http://ajaxload.info/ зображення для AJAX і розмісти його на вашому сайті у теці /images/ajax-loader.gif
  • Розташувати на вашому сайті файл templates/YOURTEMPLATE/mymodule.php із вмістом
  • Розмістити в потрібному місці на сайті (або врізати в статтю, або в текстовому модулі, або ж в index.html шаблона) код виду:
    • Для разового підвантаження модуля:
      <div rel="position-6" alt="xhtml" class="delayedmodule"><img src="/images/ajax-loader.gif"></div>
    • Для постійного перевантаження модуля з інтервалом за замовчуванням (5 секунд):
      <div rel="position-6" alt="xhtml" class="delayedmodule periodical"><img src="/images/ajax-loader.gif"></div>
    • Для постійного перевантаження шаблону з інтервалом, вказаним у коді (10 секунд):
      <div rel="position-6" alt="xhtml" class="delayedmodule periodical" id="10000"><img src="/images/ajax-loader.gif"></div>
      • Де в атрибуті rel вказано позицію з модулями, що буде вантажитись, а в атрибуті alt стиль модуля. Докладніше про стилі http://docs.joomla.org/What_is_module_chrome%3F. Атрибут alt не обов'язковий, можна не вказувати.
      • Наявність класу periodical каже скрипту, що модуль треба періодично перевантажувати.
      • Атрибуту id вказує інтервал перевантаження в мілісекундах (1000 мс = 1 сек)
  • Додати в index.php вашого шаблона такий код:
  • Якщо ви користуєтесь  jQuery замість Mootools, то змініть рядок в коді вище з $usejQuery = false; на $usejQuery = true;

Пояснення.

Нам знадобиться посилання, яке буде завантажувати лише певну позицію модулів, при чому не HTML сторінку з тегами <head>, <body>, а лише сам модуль. В Joomla є можливість задавати власний шаблон виводу інформації, про що розповідає ooffick на http://forum.joomla.org/viewtopic.php?p=1436858#p1436858. Отже, спочатку створимо в нашому шаблоні файл, відповідальнй за виведення модуля, давши йому ім'я mymodule.php. Файл має бути розташовано тут: templates/YOURTEMPLATE/mymodule.php . Звернемось до нього через посилання http://your-domain.com/index.php?tmpl=mymodule, або в цьому конкретному випадку http://gruz.org.ua/index.php?tmpl=mymodule.

Вміст файла templates/YOURTEMPLATE/mymodule.php такий:

З чого видно, що у посиланні ми можемо передавати ще два параметри: moduleposition (позиція модуля) і modulestyle (стиль модуля, або в термінології Joomla module chrome).

Отже, перейшовши по посиланню http://gruz.org.ua/index.php?tmpl=mymodule ми бачимо модуль з позиції за замовчуванням position-6 зі стилем відображення xhtml. Код сторінки приблизно такий:

Як бачимо, це не повна HTML сторінка, а саме фрагмент HTML коду суто з самим модулем. Перейшовши за посиланням http://gruz.org.ua/index.php?tmpl=mymodule&moduleposition=top&modulestyle= ми побачимо модулі з позиції top із відсутнім стилем виведення, що мінімізує виведення зайвого HTML коду, лише вміст модуля. Докладінше про стилі модулів: http://docs.joomla.org/What_is_module_chrome%3F

Таке посилання нам потрбіне для підвантаження AJAXom модулів без зайвого HTML коду.

Далі ми повинні потурбуватися про місце, де буде виводитись модуль. Для цього нам знадобиться зображення, що сигналізуватиме про завантаження. Візьмемо його, наприкад, на http://ajaxload.info/ і покладемо у /images/ajax-loader.gif нашого сайту. Ось воно:

Тепер розмістимо такий код у тому місці, де хочемо вивісити модуль:

<div rel="position-6" alt="xhtml" class="delayedmodule"><img src="/images/ajax-loader.gif"></div>

Як бачимо, у атрибуті rel ми зберігаємо позицію модуля чи модулів, а у атрибуті alt стиль відображення модуля.

Ну і власне AJAX частина, яку додаємо в index.php шаблона Joomla одразу після

defined( '_JEXEC' ) or die( 'Restricted access' );

Такий код для Joomla:

Коментарі   

Олександр
# Олександр 03.03.2012, 19:39
Можна уточнити з приводу позицій модулів, які необхідно завантажити в останню чергу.
Приміром, я хочу, щоб модулі на позиції 1,2,3,4,5 виводилися відразу, а модулі на позиції 6,7,8 і 9 - через аякс, що прописувати замість user1 і user2?
gruz
+1 # gruz 03.03.2012, 20:51
На тих, що треба згодом, таке:
Код:
<div rel="user6" alt="xhtml" class="delayedmodule"><img src="/images/ajax-loader.gif"></div>
<div rel="user7" alt="xhtml" class="delayedmodule"><img src="/images/ajax-loader.gif"></div>
<div rel="user8" alt="xhtml" class="delayedmodule"><img src="/images/ajax-loader.gif"></div>
<div rel="user9" alt="xhtml" class="delayedmodule"><img src="/images/ajax-loader.gif"></div>


А ті, що одразу, лишай як є в шаблоні.
Олександр
# Олександр 03.03.2012, 22:06
не зрозумів який код вставляти в index.php для joomla 1,5
gruz
# gruz 03.03.2012, 22:26
Веееликий фрагмент згори. А в потрібних місцях код для модулів.
Олександр
# Олександр 03.03.2012, 22:29
код згори викликає помилку
я пробував вставити цей код

JHTML::_( 'behavior.mootools' );
$document =& JFactory::getDocument();
$scr ="
window.addEvent('load', function() {
var elements = $$('.delayedmodule');
for (var i=0; i
gruz
# gruz 03.03.2012, 22:32
Вибач, магнітні бурі, я не можу сьогодні телепатично прочитати, яку саме помилку. Напиши сюди прямим текстом, не стидайся.
Олександр
# Олександр 03.03.2012, 22:31
щось не відображається весь код у вас мабуть обмеження к-сті символів в коментарі
Сергій
# Сергій 08.02.2014, 08:43
Не знаю, що я неправильно роблю, але модуль дублюється в ті ж самій позиції. Якщо оригінал поставити без позиції - то модуль не відображається взагалі. Можете допомогти порадою?
gruz
# gruz 08.02.2014, 14:37
Руками пробуєте, чи через http://www.gruz.org.ua/uk/extensions/ajaxmoduleloader.html ?

Зареєструйтесь, щоби додавати коментарі

Якщо ви помітили помилку, то виділіть фрагмент тексту та натисніть Ctrl+Enter
FaLang translation system by Faboba
Orphus System

Коментарі

  • Урок на майбутнє. Зброя і революція.

    Chillipepper Chillipepper 20.12.2016 22:59
    "... малі держави не можуть ефективно покладатися виключно на стримування в якості основної стратегії ...

    Детальніше...

     
  • AutoReadMore - автоматичне додавання кнопки Детальніше для статей Joomla, інших компонентів і модулі

    gruz gruz 13.07.2016 18:38
    Виправив в останній версі 4.5.3

    Детальніше...

     
  • AutoReadMore - автоматичне додавання кнопки Детальніше для статей Joomla, інших компонентів і модулі

    гром гром 13.07.2016 10:01
    Привіт! Відмінний плагін, не можу застосувати його до категорій. Або скрізь працює або ніде! У ...

    Детальніше...

     
  • VirtueMart 2.x Categories accordion menu

    gruz gruz 28.12.2015 12:54
    http://static.xscreenshot.com/small/2016/01/06/02/screen_12a86996b1b92dde3e5c4ca5b872b516 ...

    Детальніше...

     
  • VirtueMart 2.x Categories accordion menu

    vladsklyar vladsklyar 28.12.2015 05:31
    http://armtrading.ru/ - тут по верхньому меню потрібно

    Детальніше...