AJAX popup

25 апреля 2010 в 16:39

Цель: при клике на ссылку (заголовок ноды, картинка, дата или что нам в голову взбредет) открывается popup содержащий нужные нам поля ноды. Содержание грузиться динамически.

Условие: все через views.

Нам нужно: Views Bonus Pack. Качаем, включаем.

Создаем views который будет "грузиться".
Добавляем тип отображения feed, где Style == XLS file.
Указываем Path (например xls), и устанавливаем в аргументах Node: Nid.
Настриваем поля.

Создаем views который будет "грузить".
Обязательное поле в нем Node: Nid, ставим его в самое начало и скрываем.
Теперь в поле с заголовком нужно указать Output this field as a link где Link path: == xls/[nid].
Теперь при клике на заголовок будет открываться нужный нам xls файл.

Осталось лишь одно - прикрутить к этому делу какой-нибудь lightbox. Я использую fancybox. Вот код для него:

$(".views-field-title a").click( function() {
        $.fancybox.showActivity();
        $.ajax({
                type            : "POST",
                cache   : false,
                url             : this,
                data            : $(this).serializeArray(),
                success: function(data) {
                        var html = new Array();
                        var i = 0;
                        $(data).find("td").each(function(){
                                html[i] = $(this).html();
                                i++;
                                });
                        c =     '<div class="views-field-field-img-fid">'+html[0]+'</div>'+
                                        '<div class="views-field-title">'+html[1]+'</div>'+
                                        '<div class="date-display-single">'+html[2]+'</div>'+
                                        '<div class="">'+html[3]+'</div>'
                        ;
                        $.fancybox(c);
                        }
        });

        return false;
});

Принимаю вопрос, предложения, благодарности.

Комментарии

RockStar wrote:
спасибо, за пример. очень полезно, спасибо вам будем разбираться.

Пожалуйста. Будут вопросы - задавайте.

25 апреля 2010 в 17:33

Тут не принципиально каким модулем js это отображать. Важно лишь то, что этот способ взвращает "чистые" поля. Я пробовал возвращать разными форматами (JSON, XML и т.п.) но коректно картинки отображаются только в XLS.

25 апреля 2010 в 19:12

"solomenikm" wrote:
ример на польском: http://bialystok2016.eu/calendar. Подробнее что конкретно?

не работает в google chrome 5.0.34

не оптимальный селектор. впрочем если дом небольшой то и так сойдет.
$(".views-field-title a").click(

25 апреля 2010 в 19:37

Dеmimurych wrote:

не оптимальный селектор. впрочем если дом небольшой то и так сойдет.
$(".views-field-title a").click(

Какой будет оптимальным?

26 апреля 2010 в 1:20

спасибо, добавил в закладки

однако
как бы тутда прикрутить обычный лайтбокс (который так и так есть для имэджкэш)

25 апреля 2010 в 22:42

Valeratal wrote:
спасибо, добавил в закладки

однако
как бы тутда прикрутить обычный лайтбокс (который так и так есть для имэджкэш)


Rewrite the output of this field ->

<a href="node/[nid]" rel="lightframe">[title]</a>
26 апреля 2010 в 12:33

а можно как нибудь сделать, только чтобы он не при клики а при наведении срабатывал, но все равно и так очень круто.

26 апреля 2010 в 0:55

RockStar wrote:
а можно как нибудь сделать, только чтобы он не при клики а при наведении срабатывал, но все равно и так очень круто.

Можно сделать. $(".views-field-title a").click( function()... меняем click на hover и будет при наведении.

26 апреля 2010 в 1:06

Valeratal wrote:
спасибо, добавил в закладки

однако
как бы тутда прикрутить обычный лайтбокс (который так и так есть для имэджкэш)


Вроде да, но без лазания в код не выйдет. Здесь (c = '<div class="views-field-field-img-fid">'+html[0]+'</div>...) мы добавляем стили к каждому загружаемому полю и стандартными методами этого помоему сделать нельзя. Хотя, если память мне не изменяет, лайтбокс и может отображать html без танцев с бубном, но в данном случаи он отобразит несформатированный текст.

26 апреля 2010 в 1:18

Имелось в виду XSL? (думаю, лист Excel тут ни при чём)
на сайте не понял, куда кликать, чтобы увидеть всплывающее окно

27 апреля 2010 в 13:08

Ice-LC wrote:
Имелось в виду XSL? (думаю, лист Excel тут ни при чём)
на сайте не понял, куда кликать, чтобы увидеть всплывающее окно

Кликать на загаловки. Имелось ввиду XLS, ничего другого думать не нужно. Вообще я тоже не в восторгах от использования этого формата, но это единственный формат которой нормально работает с imagecache в views, все остальные пытаются вставить массив с данными.

27 апреля 2010 в 16:19

только после изучения JavaScript'а понял, куда кликать
"ссылки"-то заголовков никак не выделены...
красиво получилось
надо попробовать

27 апреля 2010 в 13:21

"solomenikm" wrote:
Какой будет оптимальным?

два пути. первый посмотреть в ваш штмль чтобы сказать точнее

второй путь более универсальный обрабатывать
$(document).click(function(e)) {

if ($(e.target).hasClass(.views-field-title)) {выполнить что там надо}
}

повторюсь, заниматься такой оптимизацией стоит если у вас очень много элементов на которые вы вешаете событие клик.

27 апреля 2010 в 16:36

"solomenikm" wrote:
Имелось ввиду XLS, ничего другого думать не нужно. Вообще я тоже не в восторгах от использования этого формата, но это единственный формат которой нормально работает с imagecache в views, все остальные пытаются вставить массив с данными.

Хм, да, действительно, они называют это листом Excel, хотя на самом деле это html. Лучше наверное тогда в XML сохранять, заголовков будет меньше.

28 апреля 2010 в 8:06

Ice-LC wrote:
"solomenikm" wrote:
Имелось ввиду XLS, ничего другого думать не нужно. Вообще я тоже не в восторгах от использования этого формата, но это единственный формат которой нормально работает с imagecache в views, все остальные пытаются вставить массив с данными.

Хм, да, действительно, они называют это листом Excel, хотя на самом деле это html. Лучше наверное тогда в XML сохранять, заголовков будет меньше.

Конечно лучше, но ни XML, ни JSON не могу вставить поля с imagechcache.

29 апреля 2010 в 12:03
$(".views-field-title a").click( function() {
        $.fancybox.showActivity();
        $.ajax({
                type            : "POST",
                cache   : false,
                url             : this,
                data            : $(this).serializeArray(),
                success: function(data) {
                        var html = new Array();
                        var i = 0;
                        $(data).find("td").each(function(){
                                html[i] = $(this).html();
                                i++;
                                });
                        c =     '<div class="views-field-field-img-fid">'+html[0]+'</div>'+
                                        '<div class="views-field-title">'+html[1]+'</div>'+
                                        '<div class="date-display-single">'+html[2]+'</div>'+
                                        '<div class="">'+html[3]+'</div>'
                        ;
                        $.fancybox(c);
                        }
        });

        return false;
});

А куда собственно этот код вставить ?

28 апреля 2010 в 13:04
Аватар пользователя fit fit 0

А возможно ли в окошке получить поля для редактирования ноды?
Вывод контента - это конечно полезно в ряде случаев, но админить ноды "налету" было бы вообще здоровско!

29 апреля 2010 в 12:10

Однако, при отключенном яваскрипт, пробиться к инфе простыми способами невозможно. Я имею ввиду польский пример. Не проработано.

5 мая 2010 в 10:33

Добрый день уважаемое сообщество не могу понять куда вставлять данный код, интуитивно понимаю что создать файл и всавить его туда, но куда именно помещать этот файл так и не понял или в какой файл его вставить направьте пожалуйста! Также использую fancybox

"Stalk" wrote:
$(".views-field-title a").click( function() {
$.fancybox.showActivity();
$.ajax({
type : "POST",
cache : false,
url : this,
data : $(this).serializeArray(),
success: function(data) {
var html = new Array();
var i = 0;
$(data).find("td").each(function(){
html[i] = $(this).html();
i++;
});
c = '

'+html[0]+'

'+
'

'+html[1]+'

'+
'

'+html[2]+'

'+
'

'+html[3]+'

'
;
$.fancybox(c);
}
});

return false;
});

27 ноября 2010 в 13:53