Загрузка материала в модальное окно
Добрый день!
Подскажите, что-то не могу разобраться. как сделать так, чтобы определённые материал сайта подгружался в модальном окне. Хочу сделать вывод новостей. Сами анонсы как обычно, а вот пр нажатии по кнопке «Подробнее» хочу, чтобы вылезало модальное окно, а в нем сам материал необходимой мне новости отображался.
Не пойму как надо сделать вызов AjaxSnippet, чтобы анонсы подгружались а по клику по ссылке — в модальном окне грузилось все остальное.
Подскажите, что-то не могу разобраться. как сделать так, чтобы определённые материал сайта подгружался в модальном окне. Хочу сделать вывод новостей. Сами анонсы как обычно, а вот пр нажатии по кнопке «Подробнее» хочу, чтобы вылезало модальное окно, а в нем сам материал необходимой мне новости отображался.
Не пойму как надо сделать вызов AjaxSnippet, чтобы анонсы подгружались а по клику по ссылке — в модальном окне грузилось все остальное.
Комментарии: 99
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Сниппет AjaxNews
Вызов AjaxSnippet в шаблоне в модальном окне.
Сами же анонсы выводятся просто
И чанк NewsRowTpl такой:
Проблема в том, что сейчас все работает так: Анонсы выводятся правильно, тут ничего хитрого.
При нажатии на «Подробнее» вылезает модальное окно, в котором отображается ВСЯ страница новости (вместе с head и т.д.), как будто в iframe. Необходимо вывести лишь нужные поля, ну хотя бы поле «Содержимое».
И вторая проблема в том, что при повторном нажатии на ссылку Подробнее или на Подробнее из другой новости уже идет просто переход по ссылке.
Подскажите, где я накосячил?
Но есть несколько вопросов:
1. Результат корректно выводится только если отдается через echo. return не работает.
2. Как вывести разные поля ресурса в разные div: К примеру $content в div#result, а $pagetitle в div#header
Обнаружил ряд мелких недочетов. Скорее всего даже опечаток.
1. В скрипте
В разметке же написан не id а класс:
2. В коннекторе ajax.php проверяем на наличие action
В разметке его нет вообще.
И теперь вопрос еще по коду. А как мне вместо надписи Модальное окно в самом модальном окне)) выводить заголовок статьи pagetitle?
P.S. Письмо о регистрации с Вашего сайта мне так и не пришло))
2. 'action' посылается в скрипте (см. «Шаг 2»). В принципе только для этого случая aсtion можно не использовать. Но это будет полезно для универсального контроллера, так как на него можно слать другие ajax-запросы для других действий.
Для этого нужно доработать и ajax.php (чтобы возвращал и контент и заголовок) и javascript (чтобы разобрать результат запроса и расставить всё по местам). А load() заменить на post(). Т.е. это для самостоятельного примера.
П.С. А почта могла в спам попасть. Как минимум я и еще двое зарегистрировались без проблем.
Я на этом месте завис:
На выходе я получаю массив с нужными полями, а как их раскидать в модальном окне? Это уже на стороне JS надо делать?
JS скрипт переписал так:
А сниппет [[!AJAX]] поправил так:
В сниппете (хотя через файл будет быстрее) в массив нужно добавить признак успешности success=true
А в файле скрипта функцию load() заменить на post()
Начнем с разметки. Используем стандартную разметку модального окна на Bootstrap 3.
Скрипт JS, размещаем на странице, на которой выводятся анонсы статей или в шаблон.
И теперь привожу код файла коннектора запросов ajax.php, который необходимо закинуть в папку assets.
А как выводить в модальное окно доп. поля c изображением, к примеру tv.news_pic?
Таким образом, у Вас в массиве $output будет и значение TV параметра.
А уже в скрипте JS выводим на свой вкус, к примеру:
У меня выводится вот это
Что я делаю не так?
— 1. Создал файл /assets/ajax.php
В него поместил вышеуказанный код:
2. Подключен jQuery
3. Подключен JS
4. На странице
Я не использую бутстрап, по этому немного другие данные. Результата нет
Вот команда eval("(" + response + ")"); позволяет это сделать.
Сейчас при загрузке страницы эти данные (Ajax) подгружаются на эту же страницу.
Мне же нужно было, что бы только при клике на ссылку они подгрузились.
Где можно посмотреть, что бы подходило под мои задачи не знаешь?
Сорри, после гулянки, голова плохо соображает =(
Вот сайт, это на Битриксе, мне нужно сделать такое же!
_http://pro.bitbitrix.ru/catalog/odezhda_i_obuv/
Когда наводишь на картинку товара, появляется кнопка, нажимаешь на нее, появляется модальное окно с данными этого товара. Тут прикол в чем, что данные в модальном окно подгружается только тогда, когда ты их вызываешь.
На этой странице реализовано что данные уже при загрузке страницы загружаются, что для меня не вариант.
Тебе нужно получить нужные поля — например, картинку, название, цену.
Вот скриптов в файле ajax.php из получаешь.
В итоге в скрипт JS тебе падает JSON с этими полями
Ты его разбираешь и просто путем подстановки в заранее сверстанный макет разметки подставляешь:
Таким образом сама модалка у тебя пустая, без каких-либо заранее выводимых данных. Их ты получаешь только после нажатия на ссылку, после чего начинает работать скрипт и собирать данные.
Ну а на последнем этапе показывай саму модалку .modal('show')
_http://remstroigrupp.ru/page под заголовком ссылка подробнее (тестовый вариант без оформления)
Просто я изначально запустил, посмотрел, а уже потом залез и посмотрел код, что у меня есть.
Тут наверное проблема в другом, что после закрытия модального окна, подгруженные данные остается на странице. К примеру у того же Битрикса он исчезает/удаляется _http://pro.bitbitrix.ru/catalog/odezhda_i_obuv/
Как это можно реализовать, или это уже лишнее?
… а как указать, что вот оно закрылось? а то у меня все в теле получается =(
Не будет наглостью, если я попрошу пример написать? Спасибо
У нее есть например id=«modal»
Значит, закрываешь так
и .hide(); не пойдет, нужно что бы удаляло/очищало данные в полях, а не скрывало (display: none;)
Закрываешь hide()
а потом
Если не сработает — проверь, что скрипт вообще доходит до этой строки:
т.е. сперва алерт, потом открывает модальное окно!
По идее надо после
хотя может я туплю?)
Моделька у меня на FancyBox
или я что то опять не понял
А закрытие окна отсюда вообще убери — тебе Макс написал как нужно оформить закрытие модалки.
Андрей, а обычный TV ты выводил? У меня почему то не хочет, так же не работает выше указанный код на картинку?
1) ajax.php
2) jQuery
3) JS
4) Разметка
Простое TV вообще не выводит, а с картинкой «undefined»
Возможно, через data параметры передавал. Или в скрипте их получал. Не помню…
Спасибо!
Эта строка получает его значение
В результате ты получишь json, где одним из значений будет путь к картинке.
Дальше уже в JS ты разбираешь JSON
Здесь тебе есть смысл добавить строку
Это выведет тебе в консоль значение IMG — ты уже тут увидишь, правильно ли у тебя все передается-получается.
Чтобы тестить php код — установи дополнение Console — там ты сможешь протестировать свой код, получить все необходимые значения и быть уверенным, что в той части (PHP) все правильно работает.
С помощью ваших советов удалось сделать загрузку Pagetitle, introtext и price. Делаю что-то вроде быстрого просмотра товара в модальном окне непосредственно из каталога, используется minishop2.
Как туда добавить другие поля?
нужны еще:
Картинки товара
свойства товара (favorite, popular, new, свои плагины)
кнопку добавления в корзину
или это можно сделать как-то иначе?
пробую еще так
[[!msProducts?
&resources=`13`
&tpl=`msProduct.content`
&includeThumbs=`340x476`
]]
выводятся свойства, цена, название. но как туда передавать id ресурса не знаю, и не показываются картинки (This resource is not instance of msProduct class.) кнопка тоже не работает
Свойства получай как обычные значения товара minishop
Кнопка просто верстка — без всякой динамики
если чекбокс выбран – возвращает true. как сделать чтобы работало так же как плейсхолдер:
?
кнопка получается не функциональной
пробую внутри модального окна вставить форму из чанка tpl.msProducts.row
но так же не работает, товар в корзину не добавляется. Вместо «Добавить в корзину» – ms2_frontend_add_to_cart.
млжет этой форме нужно как-то передать ID товара?
картинки выводятся стандартно
Передай вместе с ней data параметр с ID data-uid=[[+id]]
а в JS так:
в JS сейчас так:
Ну и потом в
спасибо!
еще подскажи пожалуйста как вывести сюда картинки minishop?
Но можно передать также data параметром на крайняк:
Ну а потом по той же схеме.
Если на выходных напомнишь, напишу как получить картинку minishop
$pimg = isset($_POST['pimg'])? (int) $_POST['pimg']: 0;
полный код
в JS здесь («src»,«data.pimg»);
как правильно? как делал ты?
Оставляешь так:
А в JS вроде все правильно.
а здесь вижу pimg:false
Скинь мне все скрипты, я у себя попробую потестить.
Кусок html, JS, php
PHP
В ajax.php прописываю так:
В JS прописываю так: В бутстрап разметке прописываю так:
Не выводится почему-то подскажите что делаю не так, так же не получается вывести и хлебные крошки
Уже просто замучился экспериментировать помогите пожалуйста разобраться как это сделать?
Попробуйте, получится?
А нужно туда, где вы получаете все параметры. Привожу пример из моего кода:
В ajax.php прописываю так: В JS прописываю так: В бутстрап разметке прописываю так: Не выводится почему-то подскажите что делаю не так, так же не получается вывести и хлебные крошки
Уже просто замучился экспериментировать помогите пожалуйста разобраться как это сделать?
в ajax вставляю так:
json так: в JS так: Поправьте пожалуйста что я не так делаю?
И если нужно чтобы в модалку загружался весь контент страницы, что нужно убрать или добавить?
Вопрос не совсем к modx, но всё же
Вызываю страницу auth.html кнопкой
Подключен скрипт
$(document).on('click','.more',function(e){ e.preventDefault(); // Вставляем контент в тело модального окна $("#ins").load("auth.html", function(response){ // Если ответ не пустой, открываем модальное окно if (response) { $("#loginModalCenter").modal('show'); } }); });Загружается модальное окно и в нём не загружаются лексиконы, не работают закладки, не срабатывает jgrowl, не срабатывает авторизация и т.д.Если содержимое auth.html положить на одной странице с кнопкой и вызывать стандартными методами bootstrap,
Все загружается и работает нормально.
PS стоит написать — появляется решение
$(document).ready(function(){ $(".more").click(function(){ $.ajax({ type: "POST", url: "/auth", success: function(){ $("#loginModalCenter").modal('show'); } }); }); });