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

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

10.01
130
15046
{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. Если вы хотите, чтобы кеш модуля автоматически не чистился - можно изменить этот параметр.

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

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

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

  • EditRating — модуль для лёгкого редактирования рейтинга в DataLife Engine
  • UniForm — модуль универсальных ajax-форм для DataLife Engine
  • RSS Comments Pro модуль rss-ленты комментариев для DLE
  • Easy Like - модуль организации системы лайков новостей для DLE 9.x - 10.x (обновлено до 1.4)
Закрыть

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

+

Комментарии

ПафНутиЙ
ПафНутиЙ 23 августа 2015 10:45
Ответов: 0 #5020
Адрес сайта?
river
river 25 августа 2015 00:21
Ответов: 0 #5028
Проверяю на локалке. Подскажите, возможно, я делаю что-то не так.

- Закидываю ваш js код в отдельный файл и подключаю с остальными в main.tpl
- Подключаю библиотеку jquery (может не ту, что надо?)
- Меняю кодировку ваших файлов-шаблонов.
- Ну и копирую файлы из папки uploads.

В shortstory прописываю просто <span data-afs-id="{news-id}">Быстрый просмотр</span>

В итоге этот текст "быстрый просмотр" так и остается просто текстом (тыкал wink )
ПафНутиЙ
ПафНутиЙ 25 августа 2015 00:50
Ответов: 0 #5029
Цитата: river
Подскажите, возможно, я делаю что-то не так.

Вполне возможно. Без ссылки на сайт более точно я сказать не смогу.
river
river 25 августа 2015 01:47
Ответов: 0 #5031
Собирался показывать сайт для примера, установил модуль на другой сайт и вот черт, он заработал.

Разница в сайтах - только их версия. На рабочем - 10.0, на не рабочем - 10.5 DLE
river
river 25 августа 2015 02:04
Ответов: 0 #5032
Все, теперь работает. В скрипте поставил лишний слэш wink
P.Chebotarev
P.Chebotarev 12 октября 2015 18:46
Ответов: 5 #5187
Тезка, приветствую тебя!
Подскажи, пожалуйста, в этом модуле есть возможность вывода и добавления комментариев? Или же исключительно вывод количества комментариев, я правильно понял?
Спасибо тебе за твои труды! :)
ПафНутиЙ
ПафНутиЙ 12 октября 2015 20:21
Ответов: 4 #5188
Нет, комментарии не выводит. Выводит только то, что записано в таблицах, отвечающих за новость.
P.Chebotarev
P.Chebotarev 13 октября 2015 22:49
Ответов: 3 #5191
А в перспективе не планируется? Или для этого уже придется тогда вносить правки непосредственно в файлы дле?
ПафНутиЙ
ПафНутиЙ 13 октября 2015 23:57
Ответов: 2 #5193
Не вижу смысла включать просмотр коментариев в этот модуль. Можно сделать отдельным модулем и так же подгружать на ajax.
P.Chebotarev
P.Chebotarev 14 октября 2015 09:45
Ответов: 1 #5196
Паша, а как же нет смысла? Если пользователь открыл полную новость, и у него появилось желание оставить тут же комментарий, значит он это сможет сделать лишь открыв полную новость в новом окне. Тогда смысл этого модуля не совсем понимаю, может быть он для других целей, тогда для каких?
ПафНутиЙ
ПафНутиЙ 14 октября 2015 11:38
Ответов: 0 #5197
Ну вот допустим, я добавлю в модуль возможность просмотра комментариев и их добавление. И тут другой пользователь, которому вообще не нужны комментарии начнёт ругаться на то, что в модуле полно лишнего кода, как быть? Всем не угодишь, да и я не стремлюсь к этому. Не нравится что-то в модуле — репозиторий открыт, форкайте, добавляйте новые фишки, используйте, никто не запрещает же smile

Смысл модуля в просмотре новости, а не добавлении комментариев.
Новости и комментарии - разные вещи.
Для добавления (и просмотра) комментариев можно использовать другой модуль (написать самому или заказать или нагуглить).
rayn152
rayn152 13 октября 2015 23:44
Ответов: 6 #5192
Доброй ночи! Ставлю модуль на 10.5 utf-8, а при нажатии на "быстрый просмотр" перебрасует на страницу с новостью. Может я что-то туплю?
ПафНутиЙ
ПафНутиЙ 13 октября 2015 23:57
Ответов: 5 #5194
Смотрите js-ошибки в консоли, скорее всего что-то сделали не так, либо конфликт в скриптах.
rayn152
rayn152 14 октября 2015 00:37
Ответов: 0 #5195
Спасибо, уже разобрался!
doktorpull
doktorpull 25 октября 2015 09:06
Ответов: 3 #5208
ПафНутий, а как можно остановить видео которое было воспроизведено в попапе, после закрытие видео продолжает играть.
ПафНутиЙ
ПафНутиЙ 25 октября 2015 10:00
Ответов: 2 #5209
Не используйте стандартные модальные окна.
Попробуйте MagnificPopup
river
river 29 ноября 2015 11:26
Ответов: 1 #5270
А как правильно добавить код этого модального окна в ваш модуль?
ПафНутиЙ
ПафНутиЙ 30 ноября 2015 22:42
Ответов: 0 #5273
Заменить тот код, который в модуле, на тот, который вам нужен.
finik
finik 14 января 2016 12:25
Ответов: 4 #5345
Павел, как данный модуль подружить со статическими страницами? Я пробовал прописать в span, вместо тега id новости, ссылку на статическую страницу, но это результата не дало.
ПафНутиЙ
ПафНутиЙ 15 января 2016 13:46
Ответов: 3 #5347
Вам для этого вообще не нужен модуль.
$(document).on('click', '.selector', function(event) {
	$.ajax({
		url: '/statis.html',
	})
	.done(function(data) {
		console.log('success');
	})
	.fail(function() {
		console.log('error');
	})
	.always(function() {
		console.log('complete');
	});

});
finik
finik 16 января 2016 11:51
Ответов: 2 #5349
Павел, два вопроса:
1) Как быть, если статических страниц несколько?
2) Куда вставить выше описанный код я понимаю, но что прописать в шаблоне, для вызова окна со статической страницей?
ПафНутиЙ
ПафНутиЙ 16 января 2016 12:29
Ответов: 1 #5350
1) Можно брать имя сатической страницы из элемента (завести атрибут или прямо из href брать), по которому произошел клик.
2) Нужно передать данные, полученные в результате ajax запроса в скрипт модального окна.

Имейте ввиду, что готовый код вы тут не получите, если не понимаете что и куда - лучше спросите на dle-faq.ru, если совсем туго - в стол заказов.
finik
finik 16 января 2016 12:31
Ответов: 0 #5351
Направление понял. Павел, спасибо.
alleclf
alleclf 17 января 2016 12:20
Ответов: 2 #5365
Скажите пожалуйста, сложно ли сделать что бы в превью попадали только картинки? Вариант с {fullimage-x} не подходит так как теряется форматирование. В полной новости некоторые картинки обернуты в спан, некоторые в див, необходимо сохранить эти обертки. Спасибо.
ПафНутиЙ
ПафНутиЙ 17 января 2016 12:30
Ответов: 1 #5366
Для вывода краткой новости используйте тег
{short_story}
alleclf
alleclf 17 января 2016 13:25
Ответов: 0 #5367
Полная новость состоит из картинок и текста. Картинки обернуты в спан или див. Хотелось в превью получить только картинки (без окружающего текста), но со спан/див обертками.
dies23
dies23 14 февраля 2016 22:16
Ответов: 1 #5419
Доброго дня а можно сделать что то подобное для сайт/catalog/56 например, чтобы при клике на новость подгружалось окно с новостями которые относятся к тому же символьному коду что и эта новость?
ПафНутиЙ
ПафНутиЙ 14 февраля 2016 22:52
Ответов: 0 #5420
Можно, но это уже будет другой модуль, имеющий мало общего с обсуждаемым тут.
dies23
dies23 15 февраля 2016 22:04
Ответов: 1 #5421
ПафНутиЙ, возьметесь за реализацию? И сколько бы стоило?
ПафНутиЙ
ПафНутиЙ 15 февраля 2016 22:38
Ответов: 0 #5422
Нет, я не принимаю заказы.

Информация

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