Re: AJAX
По какому критерию будет показано всплывающее окно (клик на ссылке/картинке или что-то другое)?
Re: AJAX
И все таки есть ли в Monstra полноценная поддержка ajax?
А если есть - как ее задействовать?
Например, хочу во всплывающем окне (facebox) показать текст.
Содержание текста нужно взять из, например, storage/text/...
Как это сделать???
1. В факе смотрите как вызвать содержимое страницы, вписывайте этот код в сниппет.
1.1 Или создайте блок с вашим текстом.
2. AJAX сделайте посредством Jqyery и вставьте на событие "нажатие" загрузку вашего сниппета или блока.
Re: AJAX
Если делать так как описано в факе от facebox - имеем "картинку в картинке". Т.е. во всплывающем окне окрывается весь с сайт с шапкой и футером.
Сниппеты тоже не канают хотя бы по той причине, что мне нужно установить плагин, и как мне в этом случае автоматически установить и сниппет?
Критерий - "нажатие".
Re: AJAX
Сниппеты тоже не канают хотя бы по той причине, что мне нужно установить плагин,
С этого момент а поподробнее, я что-то не очень понял, что и как нужно вызывать и какие критерии расширяемости. Вы хотите весь сайт сделать на Ajax?
В этом случае Вам потребуется чуть-чуть подправить плагин меню (в зависимости от схемы интеграции Ajax) и создать пустой шаблон который Вы будите назначать всем страницам кроме главной. И все.
Re: AJAX
что мне нужно установить плагин
Тоже вопрос что за плагин, как он работает. Опишите точнее. Т.Е. к каким единицам информации и из какого плагина Вы хотели бы задействовать Ajax. Как должно взаимодействовать с админкой в идеальном варианте.
Re: AJAX
Ну вот например такой плагин. Использовать следующим образом:
1. Скачать свежий фейсбокс.
2. Подключить евойные стили и код в темплейт как-то так:
Stylesheet::add('public/themes/default/facebox/facebox.css', 'frontend')
и
Javascript::add('public/themes/default/facebox/facebox.js', 'frontend')
3. Добавить JavaScript-код для инициализации facebox при загрузке страницы (например все ссылки у которых атрибут "class" имеет значение "facebox":
$(document).ready(function() { $('a[class="facebox"]').facebox(); });
4. В нужном месте на странице сделать ссылку с соответствующим атрибутом "class":
<p><a href="{siteurl}ajax/get_facebox_text" class="facebox">Show Facebox</a></p>
5. Enjoy!
Re: AJAX
Есть такой плагин "facebox" - он позволяет показывать контент во всплывающем окне.
С успехом выводит изображения:
echo '<a href="' .$site_url. '/public/name_plugin/' .$row['id']. '_img.jpg" rel="facebox">CLICK ME: ' .$row['id']. '</a>';
Созданная коллекция ссылок (через foreach) отлично работает:
CLICK ME: 1
CLICK ME: 2
CLICK ME: 3
CLICK ME: 4
...
Этот плагин умеет выводить, например, результат работы какого-либо скрипта или просто html файла посредством AJAX:
echo '<a href="readme.html" rel="facebox">CLICK ME'</a>';
Но стоит сделать тоже самое, но в Monstra:
echo '<a href="' .$site_url. '/storage/name_plugin/' .$row['id']. '_info.txt" rel="facebox">CLICK ME: ' .$row['id']. '</a>';
Мы получим коллекцию ссылок, которые открывают всплывающее окно с... этим же сайтом. (Т.е. его шапка, тело, футер...)
Этот момент уже обсуждался на форуме и все сводилось к ковырянию в движке.
Так вот меня интересует - что-то поменялось? или мне и остальным также нужно ковырять в движке?
Re: AJAX
Вообще то обращаться напрямую в storage
echo '<a href="' .$site_url. '/storage/name_plugin/' .$row['id']. '_info.txt" rel="facebox">CLICK ME: ' .$row['id']. '</a>';
запрещено (файл .htaccess). Этот каталог служит для хранения системных данных и обращаться к нему напрямую не является т.н. "хорошей практикой".
Re: AJAX
<a href="' .$site_url. '/storage/name_plugin/' .$row['id']. '_info.txt" rel="facebox">CLICK ME: ' .$row['id']. '</a>'
Считаю изначально подход неверным. Вы пытаетесь вызывать info.txt определяя по $row['id']. Проблема не в движке, а в подходе в виде костыля. Первое что Вам нужно определить - какой тип информации Вы хотите показывать в виде Ajax. Ваш же подход используется для сайтов без БД, на чистом php среднего уровня.
приемлемое решение - если это не весь сайт то взять плагин типа новости и использовать его как базу сделав плагин информация-аякс. Фактически, так можно сделать шорт коды вывода списка всех информация-аякс элементов, с назначенным пустым шаблоном (без шапки и футера, блоков) которые будут всплывать или открываться в определенном блоке на сайте (например в контенте) посредством Ajax с событием "нажатие". А все скрипты подключать непосредственно в этом измененном плагине.
Так что в плане поддержки Ajax у монстры проблем нет. Вопрос реализации.
Возникла идея сделать такой плагин, но обещать ничего не буду, потому как не знаю дойдут ли руки.
Re: AJAX
Вообще то обращаться напрямую в storage
запрещено (файл .htaccess). Этот каталог служит для хранения системных данных и обращаться к нему напрямую не является т.н. "хорошей практикой".
Ясно. Просто уже десятки способов перебрал.
Документация очень скудная, приходиться самому разбираться.
Re: AJAX
Faust, понял вас очень поверхностно.
С примером от razor мне проще разобраться, но все равно без документации сложновато.
Re: AJAX
razor, вы сами проверяли свой плагин-пример? У меня не работает. Открывает содержимое facebox.html на новой странице.
Re: AJAX
razor, вы сами проверяли свой плагин-пример? У меня не работает. Открывает содержимое facebox.html на новой странице.
Скорее всего вы забыли добавить скрипт, который привязывает facebox к ссылкам, либо у вас закэшировались старые файлы в <tmp/minify>. Для примера опишу последовательность действий для "чистой" инсталляции Monstra:
1. Инсталлируем "чистую" CMS, копируем в каталог <plugins> файлы плагина ajax, заходим в админку и устанавливаем этот плагин в Монстру.
2. Распаковываем архив фейсбокса и кладем файлы из каталога <src> архива по следующим адресам:
facebox.css" -> в каталог <public\assets\css>
loading.gif и closelabel.png - > в каталог <public\assets\img>
facebox.js -> в каталог <public\assets\js>
3. Теперь нужно в файле facebox.js подправить пути к картинкам, которые используются в интерфейсе окна фейсбокса. Прописываем пути относительно корневого каталога сервера в строках 88, 89 и 96 (например у меня монстра открывается по адресу http://localhost/monstra, значит путь от корня сервера будет выглядеть как /monstra):
loadingImage : '/monstra/public/assets/img/loading.gif', closeImage : '/monstra/public/assets/img/closelabel.png', <a href="#" class="close"><img src="/monstra/public/assets/img/closelabel.png" title="close" class="close_image" /></a>
4. Теперь идем в каталог с дефолтной темой (<public/themes/default>) и добавляем загрузку css и js скриптов:
4.1. В файл header.chunk.php добавляем перед строчкой <?php Stylesheet::load(); ?>
<?php Stylesheet::add('public/assets/css/facebox.css', 'frontend', 4); ?>
4.2. В файл footer.chunk.php добавляем следующие строчки перед <?php Javascript::load(); ?>:
<?php Javascript::add('../../../../topic/720/public/assets/js/ru.forum_subdomain/facebox.js', 'frontend', 3); ?> <?php Javascript::add('../../../../topic/720/public/themes/default/js/ru.forum_subdomain/default.js', 'frontend', 4); ?>
5. В этом же каталоге (<public/themes/default>) создаем подкаталог <js> и создаем в нем файл с именем default.js и следующим содержимым (инициализация facebox'a по окончанию загрузки документа):
$(document).ready(function() { $('a[class="facebox"]').facebox(); });
6. Заходим в админку, редактируем страницу "Home", добавляем например в самый конец строчку:
<p><a href="{siteurl}ajax/get_facebox_text" class="facebox">Показать окно Facebox</a></p>
и сохраняем страницу.
7. Кликаем сверху кнопку "Сайт", и кликаем по нашей свежедобавленной ссылке.
Re: AJAX
ААА ладно.
Сделаю плагин меню ссылки с которого будут выводить контент в модальном окне посредством Ajax запроса.
К выходным сделаю. Возьму какой нибудь скрипт на основе jQuery. С недогруженным Jquery или отключенными на стороне клиента скриптами работать не будет.
Re: AJAX
Хотя нет подождем новой версии монстра и на нее сделаю. Реально AJAX знаю плохо. Поэтому потребуется больше времени что бы разобраться.
Re: AJAX
Повозился, теоретически сделать можно. Практически не удается передать link (slug) в php для выполнения скрипта загрузки нужной нас страницы без общего дизайна. В общем у меня знаний не хватает. Может кто сделать такое?
Re: AJAX
Повозился, теоретически сделать можно. Практически не удается передать link (slug) в php для выполнения скрипта загрузки нужной нас страницы без общего дизайна. В общем у меня знаний не хватает. Может кто сделать такое?
Что именно?
Re: AJAX
razor, все работает. А как мне провернуть тоже самое, только в админ-панели?
Re: AJAX
Все. Подключил и к админке. RAZOR, еще раз спасибо!
Вот только жаль, что нельзя facebox подключить в плагине - у меня вышло только через подключение к шаблону
Re: AJAX
Хм... сейчас я пытаюсь встроить подобное плагину от razor в свой плагин... Получается какая-то ерунда - facebox сработал, но запрос вернул 404... Вот скрин с firebug:
Re: AJAX
Форум открылся вновь и поэтому новые вопросы для общего развития.
ajax.plugin.php
Что означает Строка 10
Plugin::Admin('ajax');
Строка 12
Action::add('frontend_pre_render','Ajax::handleRequest');
Строка 30
echo Filter::apply('content', Text::toHtml($block_contents));
Строка 40
Request::shutdown();
???
Re: AJAX
Живой пример AJAX в Монстре - это плагин Pages
1 - https://github.com/Awilum/monstra-cms/b … min.php#L7
2 - https://github.com/Awilum/monstra-cms/b … hp#L24-L33
3 - https://github.com/Awilum/monstra-cms/b … s/pages.js
Re: AJAX
Awilum, я знаю что в данном плагине используется ajax. Только я пока не хотел туда лезть. Сложным показался на первый взгляд. Ну раз ты советуешь его "раскидать" - пожалуй займусь.