• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела killoff лично.

Хак Ajax подгрузка custom в нужный блок

killoff

CD тихо, и не DVD меня ;)
Команда форума
Модератор
Регистрация
13 Май 2008
Сообщения
2.619
Реакции
1.125
  • Автор темы
  • Модер.
  • #1
Реализуем подгрузку новостей по custom через ajax, что позволит увеличить скорость загрузки страницы сайта.

Удобно применять, когда есть на странице несколько табов с выводом новостей, и чтобы не грузить все новости из табов одним разом можно использовать данный хак. Так же он используется в шаблоне Для просмотра ссылки Войди или Зарегистрируйся

1. В /engine/ajax/ создайте файл с названием custom.php в него вставьте этот код:
PHP:
<?php
// by PunPun.name Back-End разработчик и SEO оптимизатор
@error_reporting ( E_ALL ^ E_WARNING ^ E_NOTICE );
@ini_set ( 'display_errors', true );
@ini_set ( 'html_errors', false );
@ini_set ( 'error_reporting', E_ALL ^ E_WARNING ^ E_NOTICE );

define( 'DATALIFEENGINE', true );
define( 'ROOT_DIR', substr( dirname(  __FILE__ ), 0, -12 ) );
define( 'ENGINE_DIR', ROOT_DIR . '/engine' );

include ENGINE_DIR . '/data/config.php';
require_once ENGINE_DIR . '/classes/mysql.php';
require_once ENGINE_DIR . '/data/dbconfig.php';
require_once ENGINE_DIR . '/modules/functions.php';
require_once ENGINE_DIR . '/classes/templates.class.php';

dle_session();

require_once ENGINE_DIR . '/modules/sitelogin.php';
require_once ROOT_DIR . '/language/' . $config['langs'] . '/website.lng';
@header( "Content-type: text/html; charset=" . $config['charset'] );

if(!$is_logged) $member_id['user_group'] = 5;

//################# Определение групп пользователей
$user_group = get_vars( "usergroup" );
if( ! $user_group ) {
    $user_group = array ();
    $db->query( "SELECT * FROM " . USERPREFIX . "_usergroups ORDER BY id ASC" );
    while ( $row = $db->get_row() ) {
        $user_group[$row['id']] = array ();
        foreach ( $row as $key => $value ) $user_group[$row['id']][$key] = stripslashes($value);
    }
    set_vars( "usergroup", $user_group );
    $db->free();
}
//################# Определение категорий и их параметры
$cat_info = get_vars( "category" );
if( ! is_array( $cat_info ) ) {
    $cat_info = array ();
    $db->query( "SELECT * FROM " . PREFIX . "_category ORDER BY posi ASC" );
    while ( $row = $db->get_row() ) {
        $cat_info[$row['id']] = array ();
        foreach ( $row as $key => $value ) $cat_info[$row['id']][$key] = stripslashes( $value );
    }
    set_vars( "category", $cat_info );
    $db->free();
}
define( 'TEMPLATE_DIR', ROOT_DIR . '/templates/'.$config['skin']);
$custom = isset($_POST["castom"]) && is_scalar($_POST["castom"]) ? trim(strip_tags(stripslashes($_POST["castom"]))) : false;
if($custom==false) return;
if( strpos( $custom, "custom" ) !== false ) {
    $custom = "{".$custom."}";
    $custom = preg_replace_callback( "#\\{custom(.+?)\\}#i", "custom_print", $custom );
    if($custom !="") echo $custom;
}
?>
2. В табах на переключателях вставлять:
HTML:
data-ajaxc="custom id='1' template='shortstory'"
- где внутри параметры custom без фигурных скобок и вместо двойных кавичек - одинарные.
3. Там где должен выводится контент вставить:
HTML:
data-trigercajax="set"
4. Перед тегом
HTML:
</body>
вставить:
Код:
<script>
    $(function($){
        $("body").on("click", "[data-ajaxc]", function(){
            var $castom = $(this).attr("data-ajaxc");
            $.post(dle_root+"engine/ajax/custom.php", {castom:$castom}, function(data){
                $("[data-trigercajax]").html(data);
            });
        })
    });
</script>
Пример конструкции:
HTML:
<span data-ajaxc="custom id='1' template='shortstory'">Таб 0</span>
<span data-ajaxc="custom id='2' template='shortstory'">Таб 1</span>
<span data-ajaxc="custom id='3' template='shortstory'">Таб 2</span>
<div data-trigercajax="set">{custom id="1" template="shortstory"}</div>

Автор: punpun.name (@Gameer)
 
Всем привет. Подскажите как заставить работать owl carousel в этих табах?
 
  • Автор темы
  • Модер.
  • #3
Всем привет. Подскажите как заставить работать owl carousel в этих табах?
Ответил на другом уже форуме - никак! Если карусель переделаешь на табы - то можно будет сделать, иначе - никак!
 
Ответил на другом уже форуме - никак! Если карусель переделаешь на табы - то можно будет сделать, иначе - никак!
Что за бред? Это почему никак? Еще и как можно. Нужно лишь инициализировать скрипт после вставки данных каждый раз.
 
  • Автор темы
  • Модер.
  • #5
Что за бред? Это почему никак? Еще и как можно. Нужно лишь инициализировать скрипт после вставки данных каждый раз.
тогда это уже не "карусель" получится в том виде, в котором она сделана изначально :)
хотя прогеры могут всё сделать если очень захотеть или сильно кто-то попросит.
 
тогда это уже не "карусель" получится в том виде, в котором она сделана изначально :)
хотя прогеры могут всё сделать если очень захотеть или сильно кто-то попросит.
Что за не "карусель"? Для начала нужно изучить JS хотя бы что бы не писать подобного бреда. Все та же карусель получается, инициализировать нужно по новой то что подтягиваешь ajax так как данных на странице этих нет и следовательно js не может их никаким образом обработать.
После
Код:
$("[data-trigercajax]").html(data);
Вставить
Код:
$("[data-trigercajax]").owlCarousel();
 
Последнее редактирование:
Что за не "карусель"? Для начала нужно изучить JS хотя бы что бы не писать подобного бреда. Все та же карусель получается, инициализировать нужно по новой то что подтягиваешь ajax так как данных на странице этих нет и следовательно js не может их никаким образом обработать.
После
Код:
$("[data-trigercajax]").html(data);
Вставить
Код:
$(".main-carousel").owlCarousel();
Со slick slider не работает почему-то, прошу помощи. Вставляю $('main-carousel').slick('refresh'); итемы в слайдере при переключении вкладок просто бесконечно начинают дублироваться.
Использую такую конструкцию:

<span data-ajaxc="custom id='1-100' template='carousel_item'">1</span>
<span data-ajaxc="custom id='2-100' template='carousel_item'">2</span>
<span data-ajaxc="custom id='3-100' template='carousel_item'">3</span>

<div class="main-carousel slick-slider slick-dotted">
{custom category="1-100" template="carousel_item" from="0" limit="12" cache="no"}
</div>

$(function($){
$("body").on("click", "[data-ajaxc]", function(){
var $castom = $(this).attr("data-ajaxc");
$.post(dle_root+"engine/ajax/custom.php", {castom:$castom}, function(data){
$(".main-carousel").html(data);
$('.main-carousel').slick('refresh');
});
})
});
 
Последнее редактирование:
Назад
Сверху