1

Тема: AJAX

И все таки есть ли в Monstra полноценная поддержка ajax?
А если есть - как ее задействовать?

Например, хочу во всплывающем окне (facebox) показать текст.
Содержание текста нужно взять из, например, storage/text/...

Как это сделать???

Поделиться

2

Re: AJAX

По какому критерию будет показано всплывающее окно (клик на ссылке/картинке или что-то другое)?

Поделиться

3

Re: AJAX

И все таки есть ли в Monstra полноценная поддержка ajax?
А если есть - как ее задействовать?

Например, хочу во всплывающем окне (facebox) показать текст.
Содержание текста нужно взять из, например, storage/text/...

Как это сделать???

1. В факе смотрите как вызвать содержимое страницы, вписывайте этот код в сниппет.
    1.1 Или создайте блок с вашим текстом.
2. AJAX сделайте посредством Jqyery и вставьте на событие "нажатие" загрузку вашего сниппета или блока.

Ex ungue leonem

Поделиться

4

Re: AJAX

Если делать так как описано в факе от facebox - имеем "картинку в картинке". Т.е. во всплывающем окне окрывается весь с сайт с шапкой и футером.
Сниппеты тоже не канают хотя бы по той причине, что мне нужно установить плагин, и как мне в этом случае автоматически установить и сниппет?

Критерий - "нажатие".

Поделиться

5

Re: AJAX

Сниппеты тоже не канают хотя бы по той причине, что мне нужно установить плагин,

С этого момент а поподробнее, я что-то не очень понял, что и как нужно вызывать и какие критерии расширяемости. Вы хотите весь сайт сделать на Ajax?

В этом случае Вам потребуется чуть-чуть подправить плагин меню (в зависимости от схемы интеграции Ajax) и создать пустой шаблон который Вы будите назначать всем страницам кроме главной. И все.

Ex ungue leonem

Поделиться

6

Re: AJAX

что мне нужно установить плагин

Тоже вопрос что за плагин, как он работает. Опишите точнее. Т.Е. к каким единицам информации и из какого плагина Вы хотели бы задействовать Ajax. Как должно взаимодействовать с админкой в идеальном варианте.

Ex ungue leonem

Поделиться

7

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!

Поделиться

8

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>';

Мы получим коллекцию ссылок, которые открывают всплывающее окно с... этим же сайтом. (Т.е. его шапка, тело, футер...)

Этот момент уже обсуждался на форуме и все сводилось к ковырянию в движке.
Так вот меня интересует - что-то поменялось? или мне и остальным также нужно ковырять в движке?

Поделиться

9

Re: AJAX

razor, спс. Сейчас попробую разобраться во всем этом.

Поделиться

10

Re: AJAX

Вообще то обращаться напрямую в storage

xaoc пишет:

echo '<a href="' .$site_url. '/storage/name_plugin/' .$row['id']. '_info.txt" rel="facebox">CLICK ME: ' .$row['id']. '</a>';

запрещено (файл .htaccess). Этот каталог служит для хранения системных данных и обращаться к нему напрямую не является т.н. "хорошей практикой".

Поделиться

11

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 у монстры проблем нет. Вопрос реализации.
Возникла идея сделать такой плагин, но обещать ничего не буду, потому как не знаю дойдут ли руки.

Ex ungue leonem

Поделиться

12

Re: AJAX

razor пишет:

Вообще то обращаться напрямую в storage
запрещено (файл .htaccess). Этот каталог служит для хранения системных данных и обращаться к нему напрямую не является т.н. "хорошей практикой".

Ясно. Просто уже десятки способов перебрал.

Документация очень скудная, приходиться самому разбираться.

Поделиться

13

Re: AJAX

Faust, понял вас очень поверхностно.
С примером от razor мне проще разобраться, но все равно без документации сложновато.

Поделиться

14

Re: AJAX

razor, вы сами проверяли свой плагин-пример? У меня не работает. Открывает содержимое facebox.html на новой странице.

Поделиться

15

Re: AJAX

xaoc пишет:

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. Кликаем сверху кнопку "Сайт", и кликаем по нашей свежедобавленной ссылке.

Поделиться

16

Re: AJAX

ААА ладно.
Сделаю плагин меню ссылки с которого будут выводить контент в модальном окне посредством Ajax запроса.
К выходным сделаю. Возьму какой нибудь скрипт на основе jQuery. С недогруженным Jquery или отключенными на стороне клиента скриптами работать не будет.

Ex ungue leonem

Поделиться

17

Re: AJAX

Хотя нет подождем новой версии монстра и на нее сделаю. Реально AJAX знаю плохо. Поэтому потребуется больше времени что бы разобраться.

Ex ungue leonem

Поделиться

18

Re: AJAX

Повозился, теоретически сделать можно. Практически не удается передать link (slug) в php для выполнения скрипта загрузки нужной нас страницы без общего дизайна. В общем у меня знаний не хватает. Может кто сделать такое?

Ex ungue leonem

Поделиться

19

Re: AJAX

Faust пишет:

Повозился, теоретически сделать можно. Практически не удается передать link (slug) в php для выполнения скрипта загрузки нужной нас страницы без общего дизайна. В общем у меня знаний не хватает. Может кто сделать такое?

Что именно?

Поделиться

20

Re: AJAX

razor, все работает. А как мне провернуть тоже самое, только в админ-панели?

Поделиться

21

Re: AJAX

Все. Подключил и к админке. RAZOR, еще раз спасибо!
Вот только жаль, что нельзя facebox подключить в плагине - у меня вышло только через подключение к шаблону

Поделиться

22

Re: AJAX

Хм... сейчас я пытаюсь встроить подобное плагину от razor в свой плагин... Получается какая-то ерунда - facebox сработал, но запрос вернул 404... Вот скрин с firebug:

http://i60.fastpic.ru/big/2013/1205/2b/2e86d33a9472afc445c8e5289f555c2b.png

Поделиться

23

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();

???

Поделиться

24

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

Follow me: Twitter | GitHub | Facebook | Вконтакте

Стань спонсором проекта!

Сайт Awilum

Поделиться

25

Re: AJAX

Awilum, я знаю что в данном плагине используется ajax. Только я пока не хотел туда лезть. Сложным показался на первый взгляд. Ну раз ты советуешь его "раскидать" - пожалуй займусь.

Поделиться