Перейти к содержимому


[модуль] AJAX-загрузка боковых и центральных блоков


  • Вы не можете ответить в тему
В теме одно сообщение

#1 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 17 November 2014 - 08:27 PM

Модуль Ajax-Blocks предназначен для подгрузки боковых и центральных блоков аяксом после загрузки основного содержимого, чтобы поисковик загрузив страницу получал только ОСНОВНОЕ содержимое страницы.
Т.е. без лишней (и даже мешающей) информации типа списка последних новостей, списка вариантов опроса для голосования и тому подобной интересной и полезной для клиента, но вредной для индексации информации.

Спонсор модуля: idal

В "Управлении блоками" появится колонка Ajax с чекбоксами.
Для блоков, которые сделаны как "добавить блок" можно включать эту галку для любого блока, т.к. эти блоки самодостаточны.
Для блоков, которые сделаны как "добавить блок из файла" (т.е. шаблоны из /blocks/) надо смотреть индивидуально.
Практически для каждого надо в ajax-blocks.php добавить создание тех же нужных блоку smarty-данных (типа SQL-запроса, а затем smarty->assign(бла-бла-бла)), что и при обычной загрузке этого блока.
Практически всегда можно один-в-один скопировать требуемый код целиком из соответствующего файла в /includes/

На текущий момент поддержка сделана для блоков "Новинки", "Новости", "Опрос" (таков был заказ),
а также "Авторизация" и "Смена валюты" (использовались для отладки).
Остальные блоки делайте сами. Там довольно не сложно, да и пять примеров уже есть.
Либо я всегда коммерчески готов :).

На мой взгляд, модуль получился довольно интересным и полезным, хотя никто так и не ответил на предмет его полезности в соседней теме.
Спасибо безвестному SEO-шнику, сотрудничающему с idal за исходную идею.
Хотим - включаем аякс-подгрузку для каждого блока индивидуально.
Хотим - выключаем и блоки грузятся как обычно.


0. копируем файлы:

addon.php -> core/includes/admin/
blocks.php -> core/includes/ (либо вносим изменения, если файл уже правился)
ajax-blocks.php -> core/includes/processor/
blocks.tpl.html -> core/tpl/user/[шаблон]/ (либо вносим изменения, если файл уже правился)


1. в файле index.php

1.1. строку, начинающуюся с


if ( in_array($_GET["do"],


заменяем на


# BEGIN Ajax-Blocks
#if ( in_array($_GET["do"], array( "captcha", "cart", "rss", "compare", "yandex", "invoice_jur", "invoice_phys", "stat", "get_file" ))) {
if ( in_array('core/includes/processor/'.$_GET["do"].'.php',glob("core/includes/processor/*.php") )) {
# END Ajax-Blocks



2. в файле blocks_functions.php в функции GetAllBlocksAttributes()

вместо строки


$q = db_query("select bid, title, bposition, active, which, sort, html, url, admin from ".BLOCKS_TABLE." ORDER BY sort ASC");


вставляем


# BEGIN Ajax-Blocks
#$q = db_query("select bid, title, bposition, active, which, sort, html, url, admin from ".BLOCKS_TABLE." ORDER BY sort ASC");
$q = db_query("select bid, title, bposition, active, which, sort, html, url, admin, ajax_block from ".BLOCKS_TABLE." ORDER BY sort ASC");
# END Ajax-Blocks



3. в файле conf_blocks_edit.php

перед строкой


SortBlocks();


вставляем


# BEGIN Ajax-Blocks
$data = ScanPostVariableWithId(array("ajax_block"));
db_query("UPDATE ".BLOCKS_TABLE." SET ajax_block=0");
foreach ($data as $key => $val) db_query("UPDATE ".BLOCKS_TABLE." SET ajax_block=1 WHERE bid=".(int)$key);
# END Ajax-Blocks



4. в файле conf_blocks_edit.tpl.html

4.1. после строк (искать по formaxp2)


<form action='{$smarty.const.ADMIN_FILE}?dpt=conf&amp;sub=blocks_edit' method=post name="formaxp2" id="formaxp2">
<table class="adn">
<tr class="lineb">


вставляем


{* BEGIN Ajax-Blocks *}
<td align="center">Ajax</td>
{* END Ajax-Blocks *}


4.2. перед строкой


<td align="left">{$blocks_edit[i][1]}</td>


вставляем


{* BEGIN Ajax-Blocks *}
<td align="center"><input type="checkbox" name="ajax_block_{$blocks_edit[i][0]}" value="1" {if $blocks_edit[i].ajax_block} checked{/if}></td>
{* END Ajax-Blocks *}



5. в user.js куда-нибудь в конец вставляем

// BEGIN Ajax-Blocks
function load_block(bid,bclass,balign,nopad)
  {
  $.ajax({
	url: '/index.php?do=ajax-blocks&bid='+bid+'&bclass='+bclass+'&balign='+balign+'&nopad='+nopad,
	error: function(req, text, error) {alert('(0)AJAX error: ' + text + ' | ' + error);},
	success: function(res)
	  {
	  var elem = document.getElementById('ajax_block_'+bid);
	  elem.innerHTML=res;
	  var scripts = elem.getElementsByTagName('script');
	  for (var i=0,len=scripts.length;i<len;i++)
		{
		scr = scripts[i].innerHTML.replace(eval('/<!--/'),'');
		eval(scr);  
//		eval.call(window,scr);
//		window.execScript ? execScript(scr) : eval(scr);
		}	  
	  }
	});
  }
// END Ajax-Blocks

Прикрепленные файлы

  • Прикрепленный файл  Ajax-Blocks.zip   5.53К   10 Количество загрузок:

  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#2 hedhedhed

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 107 сообщений
Репутация: 4
Начинающий

Отправлено 14 September 2015 - 04:53 PM

Не получается подключить ни один блок (даже стандартные, типа "Новинки", "Новости"), при выставлении галки в админке, выпадает сообщение:
"(0)AJAX error: error | Internal Server Error", и блок не показывается.
Понятно лишь то, что есть ошибка в AJAX-запросе, который должен был вернуть код блока, на этом пока все :).

Кто может подсказать, кто ставил, - где копать ?
  • 0