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:

Коментарі   

Олександр
0 # Олександр 03.03.2012, 17:39
Можна уточнити з приводу позицій модулів, які необхідно завантажити в останню чергу.
Приміром, я хочу, щоб модулі на позиції 1,2,3,4,5 виводилися відразу, а модулі на позиції 6,7,8 і 9 - через аякс, що прописувати замість user1 і user2?
Відповісти | Відповісти цитуючи | Цитата
gruz
+1 # gruz 03.03.2012, 18: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>


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

JHTML::_( 'behavior.mootools' );
$document =& JFactory::getDocument();
$scr ="
window.addEvent('load', function() {
var elements = $$('.delayedmodule');
for (var i=0; i
Відповісти | Відповісти цитуючи | Цитата
gruz
0 # gruz 03.03.2012, 20:32
Вибач, магнітні бурі, я не можу сьогодні телепатично прочитати, яку саме помилку. Напиши сюди прямим текстом, не стидайся.
Відповісти | Відповісти цитуючи | Цитата
Олександр
0 # Олександр 03.03.2012, 20:31
щось не відображається весь код у вас мабуть обмеження к-сті символів в коментарі
Відповісти | Відповісти цитуючи | Цитата
Сергій
0 # Сергій 08.02.2014, 06:43
Не знаю, що я неправильно роблю, але модуль дублюється в ті ж самій позиції. Якщо оригінал поставити без позиції - то модуль не відображається взагалі. Можете допомогти порадою?
Відповісти | Відповісти цитуючи | Цитата
gruz
0 # gruz 08.02.2014, 12:37
Руками пробуєте, чи через http://www.gruz.org.ua/uk/extensions/ajaxmoduleloader.html ?
Відповісти | Відповісти цитуючи | Цитата
http://
0 # http:// 26.04.2014, 04:00
Hi everybody, here every person is sharing these know-how, so it's pleasant to read this blog, and I used to visit
this website everyday.

Take a look at my page casetta di legno; http://Casetteinlegnodagiardino.net: http://Casetteinlegnodagiardino.net/,
Відповісти | Відповісти цитуючи | Цитата

Додати коментар


Захисний код
Оновити

FaLang translation system by Faboba
Orphus System

Коментарі

  • Opensuse 11.4 Linux: Неможна встановити Phing

    Shad Shad 02.12.2014 01:48
    Дякую - запрацювало :D

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

     
  • OpenSuse Linux: 2-стороння синхронізація тек у реальному часі(наживо), Unison

    sv sv 21.07.2014 08:19
    Как по мне проще sshfs.

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

     
  • Joomla 1.5 та 1.7, 2.5, 3.x. Як завантажувати модулі за допомогою Ajax

    http:// http:// 26.04.2014 04:00
    Hi everybody, here every person is sharing these know-how, so it's pleasant to read this blog, and I ...

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

     
  • Joomla 1.5 та 1.7, 2.5, 3.x. Як завантажувати модулі за допомогою Ajax

    gruz gruz 08.02.2014 12:37
    Руками пробуєте, чи через http://www.gruz.org.ua/uk/extensions/ajaxmoduleloader.html ?

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

     
  • Joomla 1.5 та 1.7, 2.5, 3.x. Як завантажувати модулі за допомогою Ajax

    Сергій Сергій 08.02.2014 06:43
    Не знаю, що я неправильно роблю, але модуль дублюється в ті ж самій позиції. Якщо оригінал поставити ...

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