При використанні бібліотеки FullAjax можна зіткнутись з тим, що інші скрипти (наприклад LightBox) відмовляються працювати, або працюють не коректно. Причина з якої вони відмовляються працювати дуже проста – вони не зовсім розраховані на сумісну роботу з AJAX.
Як це можна поправити, опишу в декількох рядках нижче…
Основна причина (але не єдина) по якій деякі скрипти відмовляються працювати сумісно з AJAX – це те, що вони не “бачать” коли AJAX сторінка завантажена та готова до “використання”. Щоб це поправити потрібно самостійно їм вказувати, що сторінка “готова”.
Для цього, після завантаження AJAX сторінки потрібно повідомити скриптам, що сторінку оновлено.
Щоб визначити коли сторінка готова, можна скористатись подією “load” бібліотеки FullAJAX (приклад для Mootools fireEvent()):
FLAX.Html.onall('load', function(options){ window.fireEvent('domready'); }); |
або функцією зворотного виклику:
function doSomethingAfterFAjxPagLoad (){ window.fireEvent('domready'); }; |
Щоб ця функція спрацювала після завантаження AJAX сторінки, в базові налаштування бібліотеки FullAjax потрібно додати параметр onload:doSomethingAfterFAjxPagLoad .
Приклад :
FLAX.Filter.add({url:'/', id:fullAjaxId, onload:doSomethingAfterFAjxPagLoad}); ... function doSomethingAfterFAjxPagLoad (){ /* fix for mootools 'domready', uncomment if need*/ /* window.fireEvent('domready'); */ }; |
При використанні window.fireEvent(‘domready’); потрібно бути обережним.
По перше це допомагає лише якщо скрипт дійсно не “бачить”, що сторінка “готова”.
По друге, при сумісному використанні з іншими скриптами які нормально працюють з AJAX – це може призвести, до додаткових не бажаних помилок, таких як подвійне виконання цього скрипта. Тому в плагіні ця функція за замовчуванням закоментована.
В деяких випадках потрібно використовувати window.fireEvent(‘load’); – все залежить від самого скрипта який “відмовляється” працювати.
Взагалі, якщо “неробочий” (наприклад LightBox) скрипт потрібен лише на певній сторінці, то вище вказану функцію краще виконувати саме на цій сторінці, а не на кожній. Це попередить виникнення додаткових помилок.
Приклад для сторінки “Галерея” ( mysite.com/galery ):
if(location.toString().indexOf('/galery') != -1){ window.fireEvent('domready'); } |
Далі буде, можливо… :)
I have problems with fullajax working with joomgallery, I fix this in that way:
com_joomgallery\views\category\tmpl\default_images.php
add onClick event
...
<img onClick="fireDieSRAX()" src="thumb_src; ?>" class="jg_photo" imgwh; ?> alt="imgtitle; ?>" />
....
plugins\system\addfullajax\js\fullajax.js
add new parameter and switch it with function onClick that you added.
var SRAX_mode = true;
function fireDieSRAX(){
SRAX_mode = false;
}
...........
//find that part of cpde
if (!o.sharp){
try{
if (o.handler){
o.handler(this, o);
} else {
if (SRAX_mode){
//check your flag state
var url = this.getAttribute('action') || this.href;
if (!url) url = location.href;
//IE not understand not latin chars :)
url = ($.browser.msie) ? encodeURI(url) : url;
if (this.nodeName == 'FORM' && (!o.method || o.method.toLowerCase() != 'post')){
var uri = $.parseUri(url);
url = url.replace('?' + uri.query, '').replace('#' + uri.anchor, '');
}
url = $.delHost(url);
var changer = o.changer || o.urlChanger;
url = changer ? changer(url, this) : url;
var ind = url.indexOf('#');
if (ind > -1) url = url.substring(0,ind);
window[o.type == 'data' ? 'dax' : 'hax'](url, o);
}else{
SRAX_mode = true; //switch flag to default state
return true; //if onClick lightbox image then return true
}
}
} catch (ex){
error(ex);
}
}
To repair joomgallery pagination swap with javascript link url char ‘#’ to ‘&’
and it works?
looks to difficult :)
but thanks for info
For me it works.
– ” looks to difficult :) ”
in plugins\system\addfullajax\js\ directory placed two four files (…, fullajax.js, fullajax_uncompressed.js ,….)
Use ‘fullajax_uncompressed.js’ for test, but only enable it addfullajax.php file.
Simple way, – update lightbox image url in joomgalery file, example:
..... <a href="/joomla/gallery/gcat1.php?id=125&#ignore" rel="nofollow"></a> ....
(#) character in url perform to ignore this link.
This two methods dont fix all bags.
Bugs fix,-> simple try change script declaration to defer in head.
something missed heheh
please use < pre > tag for you code
Hi Fedik,
window.fireEvent(‘load’);
did it! Awesome – many, many thanks!
You rock! I am so grateful for your fast help.
Keep it up!
Thanks,
Dan
Добрый день) спасибо за чудесный плагин) все прекрасно работает, но есть вопрос: как настроить обновление суффикса страницы (того, который задается в настройках пунктов меню)?
простите не очень понял вопрос …
там, вроде, ничего настраивать не нужно :)
Доброй ночи, спасибо за плагин все работает. Я использую его для joomla 1.5 + virtuemart очень ускоряет загрузку. Но есть одна проблема которую я решить так и не смог. При добавлении в корзину возникает проблема. Модуль корзины не обновляется,(количество товаров) вписывал его как в инструкции про breadcrumbs. Обновление происходит при перезагрузке страницы. Така я же история в самой корзине уже в облости componentбез перезагрузки страницы она не пересчитывает количество товаров и не может их удалять. Я добавил страничку корзина в меню и добавил id в список игнорировагия ajax. Но почему то никаких изменений я не вижу.
там похоже какой то дополнительный скрипт который обновляет корзину через AJAX…
сейчас, к сожалению, у меня нет решения
Hi
I would like the FullAJAX to change only the categories (using menu), but I have to open articles in lightbox. Can I modify FullAJAX to change only categories, but open articles without ajax ?
When I add
<a href="item id=8 code" rel="nofollow">
it loads the item using ajax AND modal lightbox. I neet it to load ONLY modal.
sorry, when I add
argh, sorry again. hope this works now.
it opens lightbox AND article with ajax.
update:
the #ignore and fireEvent(‘domready’) did the trick ! it works almost perfect now !
now the only complain is: when I click an article with class=”modal” it gets opened OK. But when I change category with ajax, and go back to the category and CLICK IT AGAIN it gets loaded twice in the lightbox, and when I close it, change category, go back again to the first category and click it again – it gets loaded FOUR TIMES one below another. Do you happen to know why?
Sorry for the spam !
Update:
The output code looks like this:
http://s7.postimage.org/45osegf63/fullajax.png
When I load the page with fullayax, click on menu items to change categories few times, and then click any article, it gets loaded X times I have clicked menu items, and they stack up.
try add
ax:wrap="0"
:Thanks but doesn’t do anything :( looks like it works like #ignore but the problem is still present.
I have changed the joomla modal to fancybox 2.1.3 modal script and implemented it with class=”various” + ax:wrap=”0″ method to launch links from category_item.php and it works now ! No more problems !! Thank you hey !
HOw to disable ajax for single article??
i have one article that use slider or tabber not working with addfullajax. plese help me..??
not very understand you problem… but song like you have a script initialization problem, then you need here “Problems using LightBox and some other scripts”
also check this “Re init scripts”
Привет, благодарю за отличный компонент!
Я столкнулся с такой проблемой – решил поставить себе стилизованный скроллбар “JScrollPane2″, но, как говорилось здесь ранее, после перезагрузки позиции данный скрипт требует повторной инициализации. Вкратце принцип его работы: это обычный виджет, который в див с определленным классом вставляет свою надстройку.
Разобравшись с логикой его работы я пришел к выводу, что его проще всего сначала “убрать” при помощи его же встроенной функции destroy(), а потом опять запустить, когда позиция уже будет подгружена аяксом.
Так вот, как его запустить тут вопросов нет просто добавляю соответствующую команду в админке компонента или в самом скрипте, а вот, как “удалить” виджет перед началом загрузки аякс – это вопрос (удалять нужно именно до загрузки новой страницы, вешать событие на меню – это не красивое решение, пунктов слишком много, да и айди выборочно каждому меню итем не присвоишь).
Пробовал реализовать через $.ajax():
$(document).ajaxSend(function() {
alert(‘Событие поймано’);
//Функция виджета
$(‘.scroll-pane’).data(‘jsp’).destroy();
});
Но событие не ловится, и не выполняется даже алерт… Пробовал и с .ajaxStart() – аналогично.
Теперь вопрос :): Как повесить функцию на это или схожее событие?
спробуй наступні події:
не помогло, анлоад не “очищает” контент див… думаю нужно перехватывать событие запуска аякс запроса через саму саму библиотеку fullajax – буду капать в этом направлении.
Извини, что-то я очень сильно протупил, твое решение идеально подходит!
для того, чтобы подружить AddFullAjax с JScrollPane надо в настройках advanced написать такой код:
После этого все будет ок.
п.с. Пишу специально еще и на английском, чтобы этот плагин имел более широкое распространение. Думаю разумно было бы сделать форум или топик, в котором бы постепенно накапливались такие решения для разных компонентов.
_____________________________________
Thank you very much, your proposition is absolutely useful! All what you have to do is just type the following code in in the first code-textbox:
After that your JScrollBar will work correctly and you can fully enjoy this awesome Joomla plugin!
_______________________________
По поводу Community Builder, подскажешь как сделать повторную иницаилизацию? Для этого нужно искать, какую-то его собственную функцию?
Проблема, как упоминалось ранее именно в отображении табов.
на рахунок Community Builder, то так, там потрібно шукати