Т.е. без лишней (и даже мешающей) информации типа списка последних новостей, списка вариантов опроса для голосования и тому подобной интересной и полезной для клиента, но вредной для индексации информации.
Спонсор модуля: 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&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