» » {AJAX FULL-STORY} — модуль AJAX-загрузки полной новости для DLE

{AJAX FULL-STORY} — модуль AJAX-загрузки полной новости для DLE

10.01
140
34 355
{AJAX FULL-STORY} — модуль AJAX-загрузки полной новости для DLE


Бесплатный модуль {AJAX FULL-STORY} позволяет организовать на сайте под управлением DataLife Engine быстрый просмотр полной новости на AJAX. А благодаря правильному кешированию он работает очень эффективно.

Особенности модуля


- Не требует каких-либо правок движка.
- Учёт прав доступа к новости. Если пользователю по каким то причинам запрещено просматривать полную новость в настройках - он не сможет её посмотреть.
- Подсчёт количества просмотров. Модуль учитывает настройки DLE и если требуется - засчитывает просмотр новости.
- Корректная очистка кеша модуля. Кеш модуля очищается в соответствии с правилами автоочистки кеша DLE, поэтому в быстром просмотре новость будет всегда актуального содержания.
- Поддержка всех тегов. Модуль поддерживает все теги шаблона fullstory.tpl. Если тег не нужен в быстром просмотре - вместо него будет пустота. (форма добавления комментариев, сами комментарии).
- Кеширование на стороне клиента. Модуль отдаёт правильные заголовки. Если включено кеширование на сайте и пользователь повторно вызовет быстрый просмотр новости - браузер получит в ответ 304 статус и отдаст пользователю закешированную (в браузере) страницу.

Требования к установке


  • Версия DLE: 10.2+ (на более старых не проверялся, но должен работать вплоть до 9.6)
  • Прямые руки.


Установка


  1. Скачать актуальную версию модуля
  2. Если сайт работает в кодировке windows-1251, необходимо перекодировать файлы модуля в эту кодировку.
  3. Распаковать содержимое папки upload в корень сайта.
  4. В нужном месте любого шаблона вставить минимальный код:

    <span data-afs-id="{news-id}">Быстрый просмотр</span>

    где
    {news-id}
    - ID новости (обязательный параметр).

  5. Так же можно использовать дополнительные атрибуты:

    <span 
    data-afs-id="{news-id}"
    data-afs-template="mytemplate"
    data-afs-preset="mypreset"
    >Быстрый просмотр</span>


    - data-afs-template="mytemplate" - Путь к шаблону модуля относительно текущей папки с шаблоном сайта. Если на сайте разрешена смена скина, то путь будет построен относительно активного в данный момент шаблона сайта. По умолчанию: **{THEME}/ajax/fullstory**. (Необязательный параметр).
    - data-afs-preset="mypreset" - Путь к файлу с настройками модуля. По умолчанию не используется.

  6. В js файл шаблона вставить:

    $(document).on('click', '[data-afs-id]', function () {
    var $this = $(this),
    $data = $this.data();

    $.ajax({
    url: dle_root + 'engine/ajax/full-story.php',
    type: 'GET',
    dataType: 'html',
    data: {
    newsId: $data.afsId, // Обязательная переменная
    preset: ($data.afsPreset) ? $data.afsPreset : '', // Название файла с настройками (необязательно)
    template: ($data.afsTemplate) ? $data.afsTemplate : '', // Название файла с шаблоном (необязательно)
    },
    })
    .done(function (data) {
    var $html = $(data);

    // Данные получены, можно заняться разбором и показать их в диалоге
    // Ниже простейший пример вывода контента в стандартном модальном окне DLE

    var modalId = 'afs-' + $data.afsId + '-' + $data.afsPreset + '-' + $data.afsTemplate;
    modalId = modalId.replace(///g, "-");

    var $modalBlock = $('<div style="display: none;"><div id="' + modalId + '"></div></div>');

    $modalBlock
    .appendTo('body') // Добавляем блок на страницу
    .find('#' + modalId) // Ищем интересующий нас селектор
    .html($html) // Вставляем в него полученный код
    .dialog({ // Показываем модальное окно
    width: 800
    });

    })
    .fail(function () {
    console.log("full-story error");
    });
    });



  7. В CSS-файл шаблона вставить код для стилизации выводимых ошибок:

    .afs-error {
    /*Общий стиль для всех ошибок*/
    padding: 20px;
    background: #fff;
    color: #424242;
    }
    .afs-news-error {
    /*Стиль ошибки, если новость не найдена*/
    background: #eceff1;
    }
    .afs-tpl-error {
    /*Стиль ошибки, если не найден шаблон*/
    color: #b71c1c;
    }
    .afs-perm-error {
    /*Стиль ошибки, если не достаточно прав для просмотра полной новости*/
    background: #e65100;
    color: #F5F5F5;
    }

  8. Не забудьте подправить JS и CSS код под свой сайт smile.

Параметры, принимаемые модулем


Модуль принимает через GET-запросы следующие параметры:
- newsId - Обязательный параметр. ID новости для показа.
- template - Путь к шаблону модуля относительно текущей папки с шаблоном сайта. Если на сайте разрешена смена скина, то путь будет построен относительно активного в данный момент шаблона сайта. По умолчанию:
{THEME}/ajax/fullstory

- preset - Путь к файлу с настройками модуля. По умолчанию не используется.

Настройки модуля


Настройки модуля хранятся в отдельном файле, это сделано для безопасной передачи настроек и уменьшения нагрузки на хостинг.
Для хранения настроек был выбран формат шаблона т.к. его можно отредактировать через админпанель.

При формировании настроек необходимо соблюдать следующий синтаксис:
- Параметры необходимо писать по одному в строке.
- Имя параметра и его значение необходимо разделять знаком равенства.

На данный момент возможно использование следующих параметров:
  • fields - Поля, отбираемые из БД.
    Доступны следующие поля для запроса:
    - short_story, full_story, xfields, comm_num, fixed, tags
    - Так же можно использовать поле all, тогда будут отобраны все возможные поля новости из БД. Аналогичный результат будет, если не передавать в модуль переменную preset или передать её пустой.
  • cachePrefix - Префикс кеша, создаваемого модулем. По умолчанию full. Если вы хотите, чтобы кеш модуля автоматически не чистился - можно изменить этот параметр.

Подробнее о настройках и работе с модулем читайте в обновляемой документации.

Надеюсь модуль будет полезен не только мне. Жду ваших отзывов!

Похожие материалы

Комментарии

JonyFrost
JonyFrost 30 мая 2016 15:04
Здравствуйте! Спасибо большое за скрипт, очень пригодился! Подскажите пожалуйста, возможно ли сделать чтобы помимо загрузки окна ajax, еще и прописывался адрес url окна в адресной строке? чтобы можно было вызывать окно и по ссылке к примеру site.ru/linkid(новости), и по кнопке как сейчас
ПафНутиЙ
ПафНутиЙ 31 мая 2016 01:41
Да, возможно.
karakym
karakym 9 ноября 2016 12:16
Прошу прощенья за "флуд".
Вопрос по поводу замены стандартного модального окна для "быстрого просмотра", на второй странице комментариев есть код которым я заменил стандартный для вывода новости в модальном окне magnific.
Но он не работает, вот сообщение в консоли:

Использую так же другой ваш модуль UniForm, если я не ошибаюсь то в нем уже подключен Magnific
ПафНутиЙ
ПафНутиЙ 9 ноября 2016 22:38
ДА, в uniform уже есть magnificpopup, нужо оставить только одно подключение этого плагина.
nurbekov
nurbekov 15 ноября 2016 19:05
Здравствуйте, пытался связать с модальным окном, что шел с шаблоном, но ничего не выходит. Буду признателен за помощь.
Не получается вставить код окна, пишет что есть запрещенные символы (Хотя я помещаю в [code])
http://thevectorlab.net/slicklab/login.html - тут пример по кнопке "Forgot Password?"
А это js файл
http://thevectorlab.net/slicklab/js/bootstrap.min.js
Gott
Gott 3 декабря 2016 10:47
А как вывести всю эту инфу в модальное окно от bootstrap ?
ПафНутиЙ
ПафНутиЙ 3 декабря 2016 10:52
Гуглите по теме ajax modal bootstrap.
Но лучше используйте нормальные модальные окна magnificpopup, проблем гораздо меньше, но чаще их вообще не возникает.
gkaka
gkaka 4 декабря 2016 09:37
Здравствуйте. Прежде всего, спасибо за удивительный скрипт.
Можно ли добавить {comments} и {addcomments}?
nurbekov
nurbekov 7 декабря 2016 17:22
А что делать с новыми доп полями на dle 11? Такие как xfvalue_image_url
Прикрутить самому не получается
ПафНутиЙ
ПафНутиЙ 7 декабря 2016 18:37
Напишите тиккет, детально опишите проблему и попытки её решения.
Будет время - попробуем разобраться.
razrushutel
razrushutel 29 марта 2017 12:00
Добрый день! Модуль очень хорош! Подскажите как сделать при наведении на кнопку "Быстрый просмотр" появлялось окно возле курсора, если курсор убрать исчезало? Пробовал вот так $(document).on('mouseenter', '[data-afs-id]', function () { но только появляется.
ПафНутиЙ
ПафНутиЙ 30 марта 2017 08:07
Делайте по аналогии
$(document).on('mouseout', '[data-afs-id]', function () {
chepic
chepic 18 июля 2017 17:30
Добрый день.

Проделал все пункты 3 раза на Open Server и 2 раза на хостинге, но результата нет. Почему то не работает! Гляньте пожалуйста: dzherelne-ozero.com.ua
Фраза " Быстрый просмотр " так и не активна
ПафНутиЙ
ПафНутиЙ 19 июля 2017 09:15
Цитата: chepic
Добрый день.

Проделал все пункты 3 раза на Open Server и 2 раза на хостинге, но результата нет. Почему то не работает! Гляньте пожалуйста: dzherelne-ozero.com.ua
Фраза " Быстрый просмотр " так и не активна

поставьте шаблон по умолчанию, и произведите действия, указанные в инструкции, ещё раз.
ktulhu
ktulhu 12 октября 2017 11:31
Добрый день, сделал все, как тут описано, но ничего не происходит, в чем проблема? ссылка быстрый просмотр неактивна, и что нужно сделать на openserver? какие действия, я не совсем понял
ПафНутиЙ
ПафНутиЙ 12 октября 2017 18:20
Цитата: ktulhu
Добрый день, сделал все, как тут описано, но ничего не происходит, в чем проблема? ссылка быстрый просмотр неактивна, и что нужно сделать на openserver? какие действия, я не совсем понял

Проверьте сайт на наличие js ошибок. Это есдинственная причина, по которой при правильно выполненной установке не работает ничего.
Либо установка выполнена неправильно.
newdancer
newdancer 21 ноября 2017 00:18
Скажите как вывести через ваш модуль модуль soon tv? он подключается через include в show.full.  как можно добавить вывод в окне?
ПафНутиЙ
ПафНутиЙ 9 декабря 2017 11:06
Цитата: newdancer
Скажите как вывести через ваш модуль модуль soon tv? он подключается через include в show.full.  как можно добавить вывод в окне?

Просто добавьте код, который необходим для работы вашего модуля в файл https://github.com/dle-modules/DLE-AjaxFullStory/blob/master/upload/engine/ajax/full-story.php
vaniya92
vaniya92 15 апреля 2018 17:05
modalId = modalId.replace(///g, "-");

А здесь 3 слеша специально стоит?
С ними выдает ошибку. Но без них тоже не работает.
DLE 12.1. уже все перепробовал, не хочет что-то работать

Если слэши оставляю ошибка:
SyntaxError: expected expression, got keyword 'var'


Если слэши убираю, то при нажатии ошибка
ReferenceError: g is not defined


Цитата: vaniya92
Если слэши оставляю ошибка:
SyntaxError: expected expression, got keyword &#39;var&#39;


Если слэши убираю, то при нажатии ошибка
ReferenceError: g is not defined


С этим разобрался, просто скопировал код из файле ReadME,

но теперь ошибка

С этим разобрался, просто


С этим разобрался, просто скопировал код из файле ReadME,

но теперь ошибка

TypeError: f.getClientRects is not a function


Проблема очевидно с jQuery, только как решить ее, не знаю

Проблему решил установкой https://code.jquery.com/jquery-migrate-3.0.0.min.js
Colonizator
Colonizator 4 июня 2018 14:38
Чтобы заработало в dle 13.0 в файле engine/ajax/full-story.php
найти:
require_once ENGINE_DIR . '/classes/mysql.php';


выше добавить:
include_once ENGINE_DIR . '/classes/plugins.class.php';

Добавить комментарий

Комментировать могут только зарегистрированные пользователи

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.