Как открыть альбом gallery при клике на обложку?
Здравствуйте!
Подскажите пожалуйста как сделать так, чтобы при клике на обложку альбома, сам альбом открывался в fancybox/colorbox/lightbox, а не открывался на новой странице.
Подскажите пожалуйста как сделать так, чтобы при клике на обложку альбома, сам альбом открывался в fancybox/colorbox/lightbox, а не открывался на новой странице.
Комментарии: 38
Если делаешь на fancybox, то так
<a href="path/to/cover" data-fancybox="gallery">
<img src="path/to/image">
</a>
<a href="path/to/image" data-fancybox="gallery"></a>
<a href="path/to/image2" data-fancybox="gallery"></a>
<a href="path/to/imag3" data-fancybox="gallery"></a>
уже сделал спасибо)
Проект tsknnmgc.beget.tech
Modx Gallery. Блок на главной — «ГАЛЕРЕЯ НАШИХ РАБОТ» содержит некоторое количество альбомов, внутри которых фотографии. Если выводить стандартным чанком «galAlbumRowWithCoverTpl», то выводятся заглавные картинки альбомов.
А как сделать при клике на альбом, чтобы открывалась галерея с фотографиями (содержимым альбома)…? не понимаю… Сейчас ссылка в чанке на это выглядит так..
Modx Gallery. Блок на главной — «ГАЛЕРЕЯ НАШИХ РАБОТ» содержит некоторое количество альбомов, внутри которых фотографии. Если выводить стандартным чанком «galAlbumRowWithCoverTpl», то выводятся заглавные картинки альбомов.
А как сделать при клике на альбом, чтобы открывалась галерея с фотографиями (содержимым альбома)…? не понимаю… Сейчас ссылка в чанке на это выглядит так..
<a href="[[+url:is=``:then=`[[+image]]`:else=`[[+url]]`]]" [[+link_attributes]]>
[[+image:notempty=`<img src="[[+image]]" [[+cls:notempty=`class="[[+cls]]"`]] alt="[[+title]]" />`]]
</a>
Как поменять ее в нужную сторону ?
Добрый день. Посмотрите, вот так надо? Галерея
так точно… :) как?
Вызов
[[!GalleryAlbums?
&toPlaceholder=`GalleryAlbums`
&limit=`5`
&albumCoverSort=`rank`
&albumCoverSortDir=`DESC`
&prominentOnly=`1`
&rowTpl=`imageCategory`
&thumbWidth=`360`
&thumbHeight=`270`
]]
[[!Gallery?
&toPlaceholder=`Gallery`
&checkForRequestTagVar=`1`
&useCss=`0`
&containerTpl=`GalleryAlbumTpl`
&thumbTpl=`imageIndex`
&thumbWidth=`360`
&thumbHeight=`270`
&imageWidth=`1024`
&imageHeight=`768`
]]
[[+Gallery:isnot=``:then=`<p class="uk-margin uk-text-center"><a onclick="javascript:history.back(); return false;"><< Вернуться к общему каталогу</a></p><div class="uk-child-width-1-4@m uk-child-width-1-1" uk-grid uk-lightbox>
[[+Gallery]]</div><p class="uk-margin uk-text-center"><a onclick="javascript:history.back(); return false;"><< Вернуться к общему каталогу</a></p>`:else=`<div class="uk-child-width-1-3@m uk-child-width-1-1" uk-grid>[[+GalleryAlbums]]</div>`]]
imageCategory<a href="[[~[[*id]]? &[[+albumRequestVar]]=`[[+id]]`]]" data-caption="[[+name]]" title="[[+name]]">
<div>
<div class="uk-card uk-card-default">
<div class="uk-card-media-top uk-inline uk-transition-toggle">
<img data-src="[[+image]]" width="360" height="270" alt="[[+name]]" uk-img>
<div class="uk-transition-fade uk-position-cover uk-overlay uk-overlay-primary uk-flex uk-flex-center uk-flex-middle uk-light"></div>
<div class="uk-overlay uk-overlay-default uk-position-bottom">
<p>[[+name]]</p>
</div>
</div>
</div>
</div>
</a>
imageIndex<a href="[[+url:is=``:then=`[[+image]]`:else=`[[+url]]`]]" data-caption="[[+name]]" title="[[+name]]">
<div>
<div class="uk-card uk-card-default">
<div class="uk-card-media-top uk-inline uk-transition-toggle">
<img data-src="[[+thumbnail]]" width="360" height="270" alt="[[+name]]" uk-img>
<div class="uk-transition-fade uk-position-cover uk-overlay uk-overlay-primary uk-flex uk-flex-center uk-flex-middle uk-light"><span class="uk-icon-button" uk-icon="icon: plus-circle; ratio: 2"></span></div>
<div class="uk-overlay uk-overlay-default uk-position-bottom">
<p>[[+name]]</p>
</div>
</div>
</div>
</div>
</a>
Спасибо, попробую :)
Не за что.
Открываться должна на новой странице или в модальном окне?
в модалке предпочтительно
В модалке я делаю ajax-подгрузкой галерею. Какой плагин модалки используете (fanbybox, lightgallery, magnific)?
fanсybox
fancyBox3
Если не хотите использовать ajax, то можно сделать так немного закостылить:
1) Немного правите ваш текущий чанк galAlbumRowWithCoverTpl
1) Немного правите ваш текущий чанк galAlbumRowWithCoverTpl
[[!Gallery?
&album=`[[+id]]`
&toPlaceholder=`photos`
&thumbTpl=`tpl.gallery.image`
]]
<a href="[[+url:is=``:then=`[[+image]]`:else=`[[+url]]`]]" [[+link_attributes]] class="gallery-preview" data-photos="[[+photos:commaSeparate]]">
[[+image:notempty=`<img src="[[+image]]" [[+cls:notempty=`class="[[+cls]]"`]] alt="[[+title]]" />`]]
</a>
2) Создаете чанк tpl.gallery.image[[+image_absolute]],
3) Создаете сниппет commaSeparate<?php
return rtrim($input, ',');
4) Пишете js-код:$(document).ready(function() {
$('.gallery-preview').click(function(e) {
e.preventDefault();
let photos = [];
if ($(this).attr('data-photos') && $(this).attr('data-photos') != '') {
let list = $(this).attr('data-photos').split(',');
$.each(list,function(i){
photos.push({href: list[i]});
});
}
$.fancybox.open(photos);
});
});
спасибо, попробуую :) несколько омрачает что галерея находится в карусели, видимо оттого не совсем получается… постараюсь разобраться
В карусели или нет — это никак не влияет. Я бы конечно сделал ajax-подгрузку, но там писанины больше.
ни фига…: (
логику вроде понимаю… а сам вызов не нужно ничего менять?
логику вроде понимаю… а сам вызов не нужно ничего менять?
<div class="container-fluid">
<hh>ГАЛЕРЕЯ наших работ</hh><hr>
<div class="row" style="margin: 0;">
[[!GalleryAlbums? &toPlaceholder=`GalleryAlbums` &limit=`0` &albumCoverSort=`rank` &prominentOnly=`1`
&rowTpl=`galAlbumRowWithCoverTpl`&thumbWidth=`400` &thumbHeight=`266` &thumbTpl=`GalItemThumb1` &imageWidth=`900` &imageHeight=`900`]]
[[!Gallery? &album=`[[*galery_name]]` &limit=`0` &checkForRequestTagVar=`1`&sortby=`{"publishedon":"ASC"}` &toPlaceholder=`Gallery`
&useCss=`0` &containerTpl=`GalleryAlbumTpl` itemCls=`carousel-item` activeCls=`carousel-item active` &thumbWidth=`400` &thumbHeight=`266`
&thumbTpl=`GalItemThumb1` &imageWidth=`900` &imageHeight=`900`]]
[[+Gallery:isnot=``:then=`<div class="carousel-inner gallery_pic">[[+Gallery]]</div>`:else=`<ul class="carousel-inner gallery_pic">
[[+GalleryAlbums]]</ul>`]]
</div>
<p class="con">
</p>
</div>
ибо вроде как масло масляное получается в нем…
А что именно не работает? Ошибки в консоли есть? По клику что происходит? Если открыть исходный код на сайте, там изображения есть в data-photos у ссылок?
Прошу пардону… у компа сейчас бываю эпизодически… короче вот что происходит -:(живьем на tsknnmgc.beget.tech)
Вызов галереи в блоке на странице********************
Выглядит результат — выводятся обложки альбомов и их названия… тут все гут… При клике по обложке альбома открывается в модалке картинка с этой же картинкой, что и на обложке… а должна открываться галерея – т.е. просмотр всех картинок, что вложены в альбом. FancyBox подключен и ранее (когда была простая галерея) уже проверял – все работало… Что не так… не понимаю ☹
galAlbumRowWithCoverTpl
Вызов галереи в блоке на странице********************
<div class="container-fluid">
<hh>ГАЛЕРЕЯ наших работ</hh><hr>
<div class="row" style="margin: 0;">
[[!GalleryAlbums? &toPlaceholder=`GalleryAlbums` &limit=`0` &albumCoverSort=`rank` &prominentOnly=`1` &rowTpl=`galAlbumRowWithCoverTpl`&thumbWidth=`400` &thumbHeight=`266`]]
[[!Gallery? &album=`[[*galery_name]]` &limit=`0` &checkForRequestTagVar=`1`&sortby=`{"publishedon":"ASC"}` &toPlaceholder=`Gallery`
&useCss=`0` &containerTpl=`GalleryAlbumTpl1` itemCls=`carousel-item` activeCls=`carousel-item active` ]]
[[+Gallery:isnot=``:then=`<div class="carousel-inner gallery_pic">[[+Gallery]]</div>`:else=`<ul class="carousel-inner gallery_pic">
[[+GalleryAlbums]]</ul>`]]
</div>
<p class="con"> </p>
</div>
Выглядит результат — выводятся обложки альбомов и их названия… тут все гут… При клике по обложке альбома открывается в модалке картинка с этой же картинкой, что и на обложке… а должна открываться галерея – т.е. просмотр всех картинок, что вложены в альбом. FancyBox подключен и ранее (когда была простая галерея) уже проверял – все работало… Что не так… не понимаю ☹
galAlbumRowWithCoverTpl
<li class="col-lg-4 col-6 thumb pic_gal"> <p style="text-align: center; color:white;">[[+name]] ([[+total]])</p>
[[!Gallery? &album=`[[+id]]`&toPlaceholder=`photos`&thumbTpl=`tpl.gallery.image`]]
<a href="[[+url:is=``:then=`[[+image]]`:else=`[[+url]]`]]" [[+link_attributes]] class="gallery-preview" data-photos="[[+photos:commaSeparate]]">
[[+image:notempty=`<img src="[[+image]]" [[+cls:notempty=`class="[[+cls]] "`]] alt="[[+title]]" />`]]
</a>
</li>
GalItemThumb<div class="[[+cls]]">
<a href="[[+linkToImage:if=`[[+linkToImage]]`:is=`1`:then=`[[+image_absolute]]`:else=`[[~[[*id]]?
&[[+imageGetParam]]=`[[+id]]`
&[[+albumRequestVar]]=`[[+album]]`
&[[+tagRequestVar]]=`[[+tag]]` ]]`]]" title="[[+name]]" [[+link_attributes]]>
<img class="[[+imgCls]]" src="[[+thumbnail]]" alt="[[+name]]" [[+image_attributes]] />
</a>
</div>
GalleryAlbumTpl1<div class="clearfix mosaicflow carousel-item">
[[+thumbnails]]
</div>
Прошу прощения за столько подробностей, но чейт не пойму, что делаю не так
На странице jquery не подключен. Пользуйтесь консолью, там же написана ошибка
ничего не понимаю… все вроде подключал…
вот сейчас подставил скрипт прямо на странице…
принудительно убил весь кеш, обновил страницу… консоль ошибки не выдает…
проверил скриптом подключение jquery — выдает версию 3.7.0// т.е. все гут… но все как и прежде… не пашет…
не понимаю… где вообще копать (GalItemThumb?) чтобы при клике ссылка открывала модалку с картинками альбома… синапсы попутались, а сегодня опять исчезну вечером… вернусь — буду пытаться снова лбом в эту стену. Вам спасибо за сочувствие и помощь :)
вот сейчас подставил скрипт прямо на странице…
<script
src="https://code.jquery.com/jquery-3.7.0.min.js"
integrity="sha256-2Pmvv0kuTBOenSvLm6bvfBSSHrUJ+3A7x6P5Ebd07/g="
crossorigin="anonymous"></script>
принудительно убил весь кеш, обновил страницу… консоль ошибки не выдает…
проверил скриптом подключение jquery — выдает версию 3.7.0// т.е. все гут… но все как и прежде… не пашет…
не понимаю… где вообще копать (GalItemThumb?) чтобы при клике ссылка открывала модалку с картинками альбома… синапсы попутались, а сегодня опять исчезну вечером… вернусь — буду пытаться снова лбом в эту стену. Вам спасибо за сочувствие и помощь :)
а js код где, отвечающий за открытие модалки?
так
<script type="module"> import { Fancybox } from "https://cdn.jsdelivr.net/npm/@fancyapps/ui@4.0/dist/fancybox.esm.js";</script>
жеж вроде как… Или я что не так говою?
Не скрипт facncybox, а скрипт слушатель клика по ссылке, чтобы фотки открывались в fancybox в виде галереи? Я же расписал в своем ответе (4 пункт)
Разобрался… все оказалось проще… потерялась data-fancybox=«gallery» в «galAlbumRowWithCoverTpl»… :)
Остался последний вопрос — сейчас в модалке при клике отображаются не только фотографии одного альбома, а вообще все подряд… я так понимаю это нужно тоже в «galAlbumRowWithCoverTpl» настраивать параметры для ссылки ?!
Остался последний вопрос — сейчас в модалке при клике отображаются не только фотографии одного альбома, а вообще все подряд… я так понимаю это нужно тоже в «galAlbumRowWithCoverTpl» настраивать параметры для ссылки ?!
Так, если вы все сделали, как я написал, то должно было работать и без data-fancybox и тогда каждый бы открывался в своей галерее, а не все в одной
сделал все по вашей инструкции
[[!Gallery?
&album=`[[+id]]`
&toPlaceholder=`photos`
&thumbTpl=`tpl.gallery.image`
]]
<a
data-fancybox="gallery"
href="[[+url:is=``:then=`[[+image]]`:else=`[[+url]]`]]" [[+link_attributes]] class="gallery-preview" data-photos="[[+photos:commaSeparate]]">
[[+image:notempty=`<img src="[[+image]]" [[+cls:notempty=`class="[[+cls]]"`]] alt="[[+title]]" />`]]
</a>
</li>
при клике, если вот как в инструкции, то отображается картинка с обложкой альбома, без всяких стрелок управляющих и пр… если добавляю в код ссылки data-fancybox=«gallery»… то все отображаются штатно, но при этом обложки всех альбомов, а не фото в альбоме, как того желалось бы… :) Боюсь, я утомил :( не только себя
Странно, у меня и без data-атрибута работает. Ну тогда укажите вместо data-fancybox=«gallery»,
data-fancybox="gallery-[[+album]]"
нифига...
я вот вижу, что при клике открывается теперь путь в виде «tsknnmgc.beget.tech/#gallery--1», далее… пролистываются картинки «tsknnmgc.beget.tech/#gallery--2»… и так далее..., т.е. суть действий вроде как правильная… но [[+album]] указывает на альбомы, а требуется еще и картинку внутри альбома указать исчо типа `[[+image]]` или как?.. Может глупо рассуждать так… :) но иначе не понять. Пробовал методом слепого котенка :) но ить это не метод… плаваю я в этом ибо… самоучкой все приходится
я вот вижу, что при клике открывается теперь путь в виде «tsknnmgc.beget.tech/#gallery--1», далее… пролистываются картинки «tsknnmgc.beget.tech/#gallery--2»… и так далее..., т.е. суть действий вроде как правильная… но [[+album]] указывает на альбомы, а требуется еще и картинку внутри альбома указать исчо типа `[[+image]]` или как?.. Может глупо рассуждать так… :) но иначе не понять. Пробовал методом слепого котенка :) но ить это не метод… плаваю я в этом ибо… самоучкой все приходится
видимо, можно подставить еще какие то плейсхолдеры, чтобы сформировать путь к картинке ?! Или глупость изволю…? :)
Так приведите код к примеру как в самом первом комментарии.
Это код одного(!) Альбома, т.е. одной группы изображений:
Это код одного(!) Альбома, т.е. одной группы изображений:
<li>
<a href="изображение" data-fancybox="gallery-[[+album]]">
<img src="изображениеМини">
</a>
<a href="изображение2" class="hidden" data-fancybox="gallery-[[+album]]"></a>
<a href="изображение3" class="hidden" data-fancybox="gallery-[[+album]]"></a>
<a href="изображение4" class="hidden" data-fancybox="gallery-[[+album]]"></a>
</li>
<li class="col-lg-4 col-6 thumb pic_gal"> <p style="text-align: center; color:white;">[[+name]] ([[+total]])</p>
[[!Gallery? &album=`[[+id]]`&toPlaceholder=`photos`&thumbTpl=`tpl.gallery.image` ]]
<a data-fancybox="gallery-[[+album]]" href="[[+url:is=``:then=`[[+image]]`:else=`[[+url]]`]]" [[+link_attributes]]
class="gallery-preview" data-photos="[[+photos:commaSeparate]]">
[[+image:notempty=`<img src="[[+image]]" [[+cls:notempty=`class="[[+cls]] "`]] alt="[[+title]]" />`]]
</a>
</li>
и что не так та?
Совсем не видно разницы?
то что у вас один тег A, а в примере на каждую фотографию альбома свой тег A
т.е. не в data-photos надо передавать, а вывести [[+photos]] как отдельные теги A.
может я не знаю, но data-photos вроде такого атрибута у fancybox нет.
то что у вас один тег A, а в примере на каждую фотографию альбома свой тег A
т.е. не в data-photos надо передавать, а вывести [[+photos]] как отдельные теги A.
может я не знаю, но data-photos вроде такого атрибута у fancybox нет.
У него задача вывести обложки альбомов и по клику уже вывести в fancybox галерею одного альбома. Не стал ему предлагать ajax-подгрузку, ибо если он такой вопрос задал, то вряд ли справится. Поэтому предложил костыльное решение — вывести url-ы всех фото одного альбома в атрибут data-photos. По клику на обложку альбома должен инициализироваться fancybox с переданными в него url-ами фото.
У себя протестил — работает без проблем, автор видимо где-то ошибся
У себя протестил — работает без проблем, автор видимо где-то ошибся
Понимаю. В целом я тоже решение предложил, без кода всякого.
смысл такой что в data-fancybox должно быть одно название группы фото,
т.е. data-fancybox=«gallery-123» у всех ссылок одного альбома.
для превью мы выводим ссылку с изображением альбома и с атрибутом data-fancybox, а другие изображение как «пустые» скрытые ссылки но с таким же data-fancybox
и все работает. Не раз такое делал.
смысл такой что в data-fancybox должно быть одно название группы фото,
т.е. data-fancybox=«gallery-123» у всех ссылок одного альбома.
для превью мы выводим ссылку с изображением альбома и с атрибутом data-fancybox, а другие изображение как «пустые» скрытые ссылки но с таким же data-fancybox
и все работает. Не раз такое делал.
<li class="col-lg-4 col-6 thumb pic_gal"> <p style="text-align: center; color:white;">[[+name]] ([[+total]])</p>
<a data-fancybox="gallery-[[+id]]" href="[[+url:is=``:then=`[[+image]]`:else=`[[+url]]`]]" [[+link_attributes]]
class="gallery-preview">
[[+image:notempty=`<img src="[[+image]]" [[+cls:notempty=`class="[[+cls]] "`]] alt="[[+title]]" />`]]
</a>
[[!Gallery? &album=`[[+id]]` &thumbTpl=`tpl.gallery.image` ]]
</li>
Не знаю что у вас там в tpl.gallery.image но самое галвное в нем сделать атрибут data-fancybox=«gallery-[[+album]]» который должен быть похож как в основном чанке и как тег А сделать с сылкой на изображение. Возможно здесь не сработает album, точно не знаю какой там плейсхолдер указание id альбома<a href="изображение4" class="hidden" data-fancybox="gallery-[[+album]]"></a>
простите нубского падавана, ибо я вот опять на неопределенное время пропаду из города через час/два… потому задам вопрос на вырост себе и на момент появления снова: я вот пытаюсь понять, как сделать нечто, чего основ языка не знаю. Имеет момент сложностей перевода… Может просто подскажете что пока в разъездах почитать на эту тему, ибо напрягать вас своими глупостями как-то и неэтично вроде :)
Основной чанк, готовый код я дал выше, где вызывается галерея, просто копировать.
Нужно посмотреть tpl.gallery.image и его поправить, но код я тоже скинул в целом, остается только подставить значения
Читать по этому поводу особо нечего, просто нужна простая логика.
вы вызываете GalleryAlbums с чанком galAlbumRowWithCoverTpl
в этом чанке первая ссылка a data-fancybox="gallery-[[+id]]">
далее в этом чанке вызываете альбом через
Внутри tpl.gallery.image нужно сделать ссылки на изображения
a href=«изображение4» class=«hidden» data-fancybox="gallery-[[+album]]">
Нужно посмотреть tpl.gallery.image и его поправить, но код я тоже скинул в целом, остается только подставить значения
Читать по этому поводу особо нечего, просто нужна простая логика.
вы вызываете GalleryAlbums с чанком galAlbumRowWithCoverTpl
в этом чанке первая ссылка a data-fancybox="gallery-[[+id]]">
далее в этом чанке вызываете альбом через
[[!Gallery? &album=`[[+id]]` &thumbTpl=`tpl.gallery.image` ]]
Внутри tpl.gallery.image нужно сделать ссылки на изображения
a href=«изображение4» class=«hidden» data-fancybox="gallery-[[+album]]">
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.