Например, "Статьи", "Документация", "Инструкции".
При нажатии "Все статьи" получаем список статей именно по теме блока, в котором было нажато.
Каждый блок создается в "Управление блоками" штатным способом из файла aticles.tpl.html.
Чтобы статью можно было привязать к определенной теме (блоку) нужно сделать нижеописанные изменения:
1. в файле articles_function.php
1.1 в function articlesGetArticlesToCustomer
строку
$q = db_query( "select AID, uri, update_date, title, textToPrePublication from ".ARTICLES_TABLE." order by ordering DESC LIMIT 0,".CONF_NEWS_COUNT_IN_CUSTOMER_PART);
заменяем на
$q = db_query( "select AID, uri, update_date, title, textToPrePublication, bid from ".ARTICLES_TABLE." order by ordering, update_date DESC");
1.2. в function articlesGetAllArticles
строку
$q = db_query( "select AID, uri, update_date, title from ".ARTICLES_TABLE." order by update_date DESC" );
заменяем на
$q = db_query( "select AID, uri, update_date, title, bid from ".ARTICLES_TABLE." order by update_date DESC" );
1.3. в function articlesUpdateArticles
строку
function articlesUpdateArticles( $id_articles, $title, $uri, $textToPrePublication, $textToPublication, $metaDescription, $metaKeywords )
заменяем на
function articlesUpdateArticles( $id_articles, $title, $uri, $textToPrePublication, $textToPublication, $metaDescription, $metaKeywords, $bid )
после строки
" uri='".xToText($uri)."', ".
вставляем строку
"bid=".$bid.",".
1.4. в function articlesGetPreArticlesToCustomer
строку
$q = db_query( "select SQL_CALC_FOUND_ROWS AID, uri, update_date, title, textToPrePublication from ".ARTICLES_TABLE." order by ordering DESC LIMIT $offset_,".CONF_NEWS_COUNT_IN_NEWS_PAGE);
заменяем на
$filter = isset($_GET['bid'])?(" WHERE bid=".$_GET['bid']):"";
$q = db_query( "select SQL_CALC_FOUND_ROWS AID, uri, update_date, title, textToPrePublication from ".ARTICLES_TABLE.$filter." order by ordering DESC LIMIT $offset_,".CONF_NEWS_COUNT_IN_NEWS_PAGE);
2. в файле modules_articles.php
2.1. после
die('<font color="green">Первый запуск модуля, инсталляция. Обновите страницу.</font>');
}
вставляем (ниже фигурной скобки!)
$data = mysql_query("desc ".ARTICLES_TABLE);
while ($row[] = mysql_fetch_assoc($data));
$flag = true;
foreach ($row as $cur_row) if ($cur_row['Field'] == "bid") {$flag=false; break;}
if ($flag) mysql_query("ALTER TABLE ".ARTICLES_TABLE." ADD bid int(11) DEFAULT 0");
$data = db_query("SELECT bid, title FROM ".BLOCKS_TABLE." WHERE url='articles.tpl.html' ORDER BY title");
$blocks[] = array('bid' => 0, 'title' => '- ');
while ($row = db_fetch_assoc($data)) $blocks[] = $row;
$smarty->assign("blockselect",$blocks);
2.2. строку
articlesUpdateArticles($_POST["edit_articles_id"], $_POST["title"], $_POST["uri"], $_POST["textToPrePublication"], $_POST["textToPublication"], $_POST["meta_description"], $_POST["meta_keywords"]);
заменяем на
articlesUpdateArticles($_POST["edit_articles_id"], $_POST["title"], $_POST["uri"], $_POST["textToPrePublication"], $_POST["textToPublication"], $_POST["meta_description"], $_POST["meta_keywords"], $_POST["bid"] );
3. в файле modules_articles.tpl.html
3.1. после
<tr class="lins">
<td align="right">{$smarty.const.ADMIN_ARTICLES_URI}:</td><td><input type=text name='uri' value='{if $edit_articles}{$edit_articles.uri}{else}{$uri}{/if}' style="width: 150px;" class="textp"> <a href="JavaScript:art_auto_uri()" style="text-decoration:underline;">[транслит]</a></td>
</tr>
вставляем
<tr class="lins">
<td align="right">BlockName:</td>
<td>
<select name='bid'>
{section name=k loop=$blockselect}
<option value='{$blockselect[k].bid}'{if $blockselect[k].bid EQ $edit_articles.bid} selected {/if}>{$blockselect[k].title}</option>
{/section}
</select>
</td>
</tr>
3.2. после
<td align="left" width="100%">{$smarty.const.ADMIN_ARTICLES_NAMEF}</td>
вставляем
<td align="right">BlockName</td>
3.3. после
<td align="left">{$articles_posts[i].title}</td>
вставляем
<td align="right">
{section name=k loop=$blockselect}
{if $blockselect[k].bid EQ $articles_posts[i].bid}{$blockselect[k].title}{/if}
{/section}
</td>
4. в файле blocks.tpl.html
строку
<td class="{$bclass}" align="{$balign}">{if $binfo[b].html eq 1}{include file="blocks/`$binfo[b].url`" blocknum=$smarty.section.b.index}{else}{$binfo[b].content}{/if}</td>
заменяем на
<td class="{$bclass}" align="{$balign}">{if $binfo[b].html eq 1}{include file="blocks/`$binfo[b].url`" blocknum=$smarty.section.b.index bid=$binfo[b].bid}{else}{$binfo[b].content}{/if}</td>
5. содержимое файла articles.tpl.html заменяем на
{if $articles_array}
<div align="left" class="articles">
{counter assign=flag start=0}
{section name=u loop=$articles_array}
{if $articles_array[u].bid == $bid && $flag < 5}
{if $flag}<br>{/if}
{counter}
<span class="date"><b>{$articles_array[u].update_date}</b></span><br>
<a href="{$smarty.const.ARTICLES_ROOT}/{$articles_array[u].uri}.html"><h2>{$articles_array[u].title}</h2></a>
<div>{$articles_array[u].textToPrePublication}</div>
{/if}
{/section}<br>
{if $flag}<a href="{$smarty.const.ARTICLES_ROOT}/?bid={$bid}"><h2>{$smarty.const.STRING_ARTICLES_INDEX}</h2></a>
{else}<b>no articles</b>{/if}
</div>
{/if}
где $flag < 5 это количество показываемых в блоке (блоках) статей (штатно количество статей равно количеству новостей).
6. первым делом заходим в админку в Модули/Статьи. Это надо, чтобы в таблице xxxx_articles (она же ARTICLES_TABLE) создалось поле bid, в котором каждой статье будет прописан идентификатор ее блока либо (изначально) ноль.