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


MultiBlock (дополнение к модулю "Статьи")


  • Вы не можете ответить в тему
Сообщений в теме: 29

#1 badisoft

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

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

Отправлено 28 September 2012 - 01:36 PM

Это дополнение к модулю "Статьи" позволяет на базе модуля делать несколько блоков статей с разным содержимым.
Например, "Статьи", "Документация", "Инструкции".
При нажатии "Все статьи" получаем список статей именно по теме блока, в котором было нажато.
Каждый блок создается в "Управление блоками" штатным способом из файла 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">&nbsp;<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, в котором каждой статье будет прописан идентификатор ее блока либо (изначально) ноль.
  • 1
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#2 idal

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

  • Assistent vsupport.club
  • PipPipPip
  • 243 сообщений
Репутация: 7
Начинающий
  • ГородКиев

Отправлено 28 September 2012 - 02:49 PM

строчку
$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);

заменил что то не фурычет, может где то что то надо еще подправить
  • 0

#3 badisoft

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

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

Отправлено 28 September 2012 - 05:03 PM

заменил что то не фурычет

"что-то не фурычит" очень сложно диагностировать :).

может где то что то надо еще подправить

На cpu.badisoft.ru ведь работает.
Повторюсь, писались эти дополнения на внутреннем закрытом сайте.
На cpu.badisoft.ru изменения вносились уже строго по инструкции.

PS. В инструкции не написано, что писать в .htaccess для реврайта /articles/aaa в /articles/?bid=nn, но это и вопрос совершенно отдельный, довольно простой и впрямую к дополнению не относящийся.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#4 idal

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

  • Assistent vsupport.club
  • PipPipPip
  • 243 сообщений
Репутация: 7
Начинающий
  • ГородКиев

Отправлено 28 September 2012 - 11:59 PM

"что-то не фурычит" очень сложно диагностировать :)

Все с первого поста работает. При переходе на все новости site.ru/stati/
Но при переходе ссылке site.ru/stati/?bid=27 видает 404 error.
Сначала я делал по свою категории (biz) не работает. Попробовал под стандартную, все точно сделал по инструкции (перепроверил 2 раза) но все равно не работает.
Буду очень благодарен если выставите фалы )))

PS. В инструкции не написано, что писать в .htaccess для реврайта /articles/aaa в /articles/?bid=nn, но это и вопрос совершенно отдельный, довольно простой и впрямую к дополнению не относящийся.

это понятно.

"что-то не фурычит" очень сложно диагностировать :)

Все с первого поста работает. Но при переходе на все новости (site.ru/stati//?bid=27) видает 404 error. Сначала я делал по свою категории (biz) не работает. Попробовал под стандартную, все точно сделал по инструкции (перепроверил 2 раза) но все равно не работает. Буду очень благодарен если выставите фалы )))

PS. В инструкции не написано, что писать в .htaccess для реврайта /articles/aaa в /articles/?bid=nn, но это и вопрос совершенно отдельный, довольно простой и впрямую к дополнению не относящийся.

это понятно.


Сообщение отредактировал idal: 28 September 2012 - 11:59 PM

  • 0

#5 badisoft

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

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

Отправлено 29 September 2012 - 07:34 AM

Все с первого поста работает. При переходе на все новости site.ru/stati/

Причем тут новости? В блоке должна быть ссылка с текстом "Все статьи" и урлом site.ru/stati/?bid=nn, где nn - идентификатор блока. Например, на моем тестовом сайте это cpu.badisoft.ru/articles/?bid=27 для блока "Статьи" и cpu.badisoft.ru/articles/?bid=39 для блока "Документация". Естественно, 27 и 39 - это идентификаторы блоков именно на моем сайте, у Вас они будут другими.

Если в ссылке нет ?bid=nn, значит вы сделали что-то не так. Например, не заменили содержимое articles.tpl.html или не удалили кэш (содержимое каталога core/cache) после этого.

Буду очень благодарен если выставите фалы )))

Вот этого опять не понял. Файлы выложить, чтоли? :)
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#6 idal

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

  • Assistent vsupport.club
  • PipPipPip
  • 243 сообщений
Репутация: 7
Начинающий
  • ГородКиев

Отправлено 02 October 2012 - 12:14 PM

пробовал, пробовал, не получилось, сделал по другому, создавал статические страницы и блоку присваивал показ именно на той странице, немного через ж. но пока покатит.
Спасибо за помощь.
  • 0

#7 badisoft

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

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

Отправлено 02 October 2012 - 12:35 PM

немного через ж. но пока покатит.

Может, таки разберемся, что не так? :)
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#8 idal

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

  • Assistent vsupport.club
  • PipPipPip
  • 243 сообщений
Репутация: 7
Начинающий
  • ГородКиев

Отправлено 02 October 2012 - 12:44 PM

Да вроде все так, все работает полная новость выводится, но вот по сортировке категорий не работает(articles/?bid=xx), не знаю я уже все все по три раза проверял )))),

сделал по другому, создавал статические страницы и блоку присваивал показ именно на той странице

Меня и этот вариант устраивает, только не знаю с точки сео как оно будет
  • 0

#9 badisoft

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

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

Отправлено 02 October 2012 - 01:25 PM

Да вроде все так, все работает полная новость выводится, но вот по сортировке категорий не работает(articles/?bid=xx), не знаю я уже все все по три раза проверял

Так может, Вы дадите ссылку и я гляну?
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#10 idal

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

  • Assistent vsupport.club
  • PipPipPip
  • 243 сообщений
Репутация: 7
Начинающий
  • ГородКиев

Отправлено 02 October 2012 - 01:51 PM

не пока не могу, хостинг закрыли за неуплату )))
  • 0

#11 dgimmibos

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

  • Assistent vsupport.club
  • PipPipPip
  • 126 сообщений
Репутация: 12
Начинающий

Отправлено 17 October 2012 - 11:38 AM

а вообще в виде менюшки можно сделать ?
  • 0

#12 badisoft

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

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

Отправлено 17 October 2012 - 12:05 PM

Какое "вообще" надо сделать в виде менюшки?
Если это ТЗ, то весьма непонятное :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#13 dgimmibos

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

  • Assistent vsupport.club
  • PipPipPip
  • 126 сообщений
Репутация: 12
Начинающий

Отправлено 17 October 2012 - 09:58 PM

Меню в виде статических ссылок, как на любом блоге, категории на статьи я имею ввиду, аналогично категории товаров, потому как если статей там несколько десятков, то возникает проблема с навигацией, и поиска нужной интересной статьи. :)
  • 0

#14 badisoft

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

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

Отправлено 17 October 2012 - 11:07 PM

То, что сделано мной это лишь дописочки-довесочки к уже существующему модулю "Статьи" от trickiweb (насколько я помню). Так сказать, дополнительный обвес не трогая модуль.

То, что хотите Вы - это совершенно другой по сути модуль статей, у него есть новая сущность - каталогизация. Он не сложен (собственно, все не сложно, когда разберешься), но переделывать модуль от trickiweb (который в свою очередь не написан "в идеале", а переделка штатного модуля новостей) для создания каталогизации не рационально, проще написать новый, с нуля и правильно. Но зачем писать то, что уже есть?
Насколько я знаю, у нескольких коммерческих авторов есть на продажу такие модули.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#15 nicksan

    Пользователь

  • Download User
  • PipPip
  • 10 сообщений
Репутация: 0
Начинающий

Отправлено 24 October 2012 - 12:49 PM

подскажите как правильно написать реврайт
изначально было в .htaccess:
RewriteRule ^stati/([^/]+)\.html$ index.php?fullarticles=$1 [L]
RewriteRule ^stati/([0-9]+)\$ index.php?articles=yes&amp;offset=$1 [L]
RewriteRule ^stati/$ index.php?articles=yes [L]

при просмотре всех статей stati/?bid=24 ошибка 404, как правильно написать реврайт

Сообщение отредактировал nicksan: 24 October 2012 - 01:01 PM

  • 0

#16 nicksan

    Пользователь

  • Download User
  • PipPip
  • 10 сообщений
Репутация: 0
Начинающий

Отправлено 28 October 2012 - 01:27 PM

не ужели так тяжело написать как побороть эту проблемку
  • 0

#17 badisoft

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

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

Отправлено 28 October 2012 - 01:44 PM

не ужели так тяжело написать как побороть эту проблемку

Два варианта:

1. Кто-нибудь точно знает, как решить проблему, но, гад этакий, ленится потратить две минуты и написать два слова.

2. Никто сходу решения не знает, т.к. модуль написан совсем недавно и я не уверен, что его вообще кто-то кроме заказчика ставил. Лично я "сходу" не знаю ответа на Ваш вопрос, а тратить время на бесплатное решение проблем чужого человека мне сейчас не хочется, т.к. есть другие - более интересные во всех отношениях - задачи. Это пол-года назад я радостно бросался на решение любых проблем любого форумчанина, но по мере роста количества предлагаемых к решению проблем я становлюсь разборчив :).

Выберите более похожий на правду вариант сами :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#18 nicksan

    Пользователь

  • Download User
  • PipPip
  • 10 сообщений
Репутация: 0
Начинающий

Отправлено 28 October 2012 - 07:51 PM

не ужели так тяжело написать как побороть эту проблемку

Два варианта:

1. Кто-нибудь точно знает, как решить проблему, но, гад этакий, ленится потратить две минуты и написать два слова.

2. Никто сходу решения не знает, т.к. модуль написан совсем недавно и я не уверен, что его вообще кто-то кроме заказчика ставил. Лично я "сходу" не знаю ответа на Ваш вопрос, а тратить время на бесплатное решение проблем чужого человека мне сейчас не хочется, т.к. есть другие - более интересные во всех отношениях - задачи. Это пол-года назад я радостно бросался на решение любых проблем любого форумчанина, но по мере роста количества предлагаемых к решению проблем я становлюсь разборчив :).

Выберите более похожий на правду вариант сами :).

а пример своего реврайта тяжело выложить?

не ужели так тяжело написать как побороть эту проблемку

Два варианта:

1. Кто-нибудь точно знает, как решить проблему, но, гад этакий, ленится потратить две минуты и написать два слова.

2. Никто сходу решения не знает, т.к. модуль написан совсем недавно и я не уверен, что его вообще кто-то кроме заказчика ставил. Лично я "сходу" не знаю ответа на Ваш вопрос, а тратить время на бесплатное решение проблем чужого человека мне сейчас не хочется, т.к. есть другие - более интересные во всех отношениях - задачи. Это пол-года назад я радостно бросался на решение любых проблем любого форумчанина, но по мере роста количества предлагаемых к решению проблем я становлюсь разборчив :).

Выберите более похожий на правду вариант сами :).

а пример своего реврайта тяжело выложить?

тем более я как смотрю на тестовом сайте то работает
  • 0

#19 badisoft

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

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

Отправлено 28 October 2012 - 11:23 PM

а пример своего реврайта тяжело выложить?

Да ради бога.
rewrite ^/articles/art/$ /index.php?articles=yes&bid=27 last;
rewrite ^/articles/doc/$ /index.php?articles=yes&bid=39 last;
только это не для Апача (.htaccess), которого у меня нет. Ну а для Апача - см. выше.
Может будет работать впрямую сконвертированное в апачевское RewriteRule, может нет, не знаю.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#20 nicksan

    Пользователь

  • Download User
  • PipPip
  • 10 сообщений
Репутация: 0
Начинающий

Отправлено 31 October 2012 - 06:52 PM

Не соблагословит ли мне Великий Гуру объяснить: не пойму articles/doc/ приставка doc/ , art/ где указывается в настройках или это произвольные пути, например у меня название блока Статьи-Офисная мебель при наведении на все статьи articles/?bid=24 при нажатии БЕЛЫЙ ЭКРАН СМЕРТИ 404 :blink: .
За реврайты спасибо, что выложили. Я все уже перепробывал результат =0, изменения в модулях и шаблонах раз по N кол-во перепроверял и сносил и заново ставил.Это дополнение мультиблок к этому модулю http://vsupport.club...-модуль-статьи/
  • 0