Искать  
 
   
 
Выбор конкретных категорий
Отправлено: 07 Октябрь 2008 07:47 A.M.   [ Игнорировать ]
Администратор
Avatar
RankRankRankRank
Всего сообщений:  1423
Зарегистрирован  2007-12-27

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

Как можно отфильтровать необходимые пользователю категории, допустим 14, 25, 26 и 38? Возможно это будет фильтроваться на какой-то отдельной странице.

 Подпись 

ExpressionEngine - SEO-ориентированный движок

Профиль
 
 
Отправлено: 07 Октябрь 2008 11:14 P.M.   [ Игнорировать ]   [ # 1 ]
Администратор
Avatar
RankRankRankRank
Всего сообщений:  891
Зарегистрирован  2008-01-07

Тоесть пользователь может выбирать категории которие показивать на главной или на другой люой строници?

Профиль
 
 
Отправлено: 07 Октябрь 2008 11:19 P.M.   [ Игнорировать ]   [ # 2 ]
Администратор
Avatar
RankRankRankRank
Всего сообщений:  1423
Зарегистрирован  2007-12-27
budulay - 07 Октябрь 2008 11:14 P.M.

Тоесть пользователь может выбирать категории которие показивать на главной или на другой люой строници?

Да, либо на главной либо на отдельной

 Подпись 

ExpressionEngine - SEO-ориентированный движок

Профиль
 
 
Отправлено: 08 Октябрь 2008 12:22 A.M.   [ Игнорировать ]   [ # 3 ]
Member
Avatar
RankRankRank
Всего сообщений:  153
Зарегистрирован  2008-08-19

Что-то вроде поиска?

{exp:weblog:entries weblog="{my_weblog}" category="14|25|26|38"}
.....
{/exp:weblog:entries} 

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

Если я верно понял вопрос...

Профиль
 
 
Отправлено: 08 Октябрь 2008 06:12 A.M.   [ Игнорировать ]   [ # 4 ]
Администратор
Avatar
RankRankRankRank
Всего сообщений:  1423
Зарегистрирован  2007-12-27

можно из post можно из url. Только не проставишь ведь category=”{segment_1}|{segment_2}|{segment_3}|{segment_4}...”

 Подпись 

ExpressionEngine - SEO-ориентированный движок

Профиль
 
 
Отправлено: 08 Октябрь 2008 04:34 P.M.   [ Игнорировать ]   [ # 5 ]
Member
Avatar
RankRankRank
Всего сообщений:  153
Зарегистрирован  2008-08-19

Так а что мешает включить PHP (с обработкой на Входе)?

И если ПОСТОМ:

В форме:

<input type="checkbox" name="category[]" value="14" />Кат 1
<input type="checkbox" name="category[]" value="25" />Кат 2
<input type="checkbox" name="category[]" value="26" />Кат 3
<input type="checkbox" name="category[]" value="38" />Кат 4 

Обработчик:

$cat "";

foreach( 
$_POST['category'as $c )
{
    $cat 
.= $c."|";
}

{exp
:weblog:entries weblog="{my_weblog}" category="<?=$cat?>"}
... 


ИЛИ например если мы передаем урлом то так:

Запрос:
/seg_1/seg_2/14|25|26|38/

Обработчик:

{exp:weblog:entries weblog="{my_weblog}" category="{segment_3}"}
... 
Профиль
 
 
Отправлено: 08 Октябрь 2008 05:49 P.M.   [ Игнорировать ]   [ # 6 ]
Администратор
Avatar
RankRankRankRank
Всего сообщений:  1423
Зарегистрирован  2007-12-27

Не совсем понимаю в отдельных кусках кода, если можно законченное решение,
а это /seg_1/seg_2/14|25|26|38/  понравилось, сразу не догадался, что можно ведь вывести категории таким образом

 Подпись 

ExpressionEngine - SEO-ориентированный движок

Профиль
 
 
Отправлено: 10 Октябрь 2008 12:58 A.M.   [ Игнорировать ]   [ # 7 ]
Member
Avatar
RankRankRank
Всего сообщений:  153
Зарегистрирован  2008-08-19

POST подробнее:

Допустим наш шаблон /site/search/ и вэблог weblog
(шоблону врубаем обработку PHP на входе)
тогда его содержимое:

<form action="{path=site/search}" method="post">
 <
div>Отмерьте галочками категории для отфильтрации:</div>
{exp:weblog:categories weblog="weblog" style="linear"}
   
<input type="checkbox" name="category[]" value="{category_id}" /> {category_name}<br />
{/exp:weblog:categories}

<input type="submit" value="Поиск" />
</
form>

<?php
$cat 
"";

if( isset(
$_POST['category']) )
{
   
foreach( $_POST['category'as $c )
      
$cat .= $c."|";
   echo 
"<h2>Найденные статьи:</h2>";
}
else echo "<h2>Все статьи:</h2>";
?>

{exp
:weblog:entries weblog="weblog" category="<?=$cat?>"}
<div class="entry">
Статья №{entry_id}<br />
<
a href="{path=site/details/{url_title}}">{title}</a>
</
div>
{/exp:weblog:entries} 
Профиль
 
 
Отправлено: 10 Октябрь 2008 07:18 A.M.   [ Игнорировать ]   [ # 8 ]
Администратор
Avatar
RankRankRankRank
Всего сообщений:  1423
Зарегистрирован  2007-12-27

Это получается по методу post, т.е. в сегментах ничего не будет.
Как сделать, чтобы с одной страницы (где стоят чекбоксы для выбора категорий), происходил переход на другую страницу, где формируются новости, в соответствии с /seg_1/seg_2/14|25|26|38/
Понимаю, что это просто, но пока не соображу.

 Подпись 

ExpressionEngine - SEO-ориентированный движок

Профиль
 
 
Отправлено: 10 Октябрь 2008 08:19 A.M.   [ Игнорировать ]   [ # 9 ]
Новичок
Avatar
Rank
Всего сообщений:  36
Зарегистрирован  2008-01-09
mrtt - 10 Октябрь 2008 07:18 A.M.

Это получается по методу post, т.е. в сегментах ничего не будет.
Как сделать, чтобы с одной страницы (где стоят чекбоксы для выбора категорий), происходил переход на другую страницу, где формируются новости, в соответствии с /seg_1/seg_2/14|25|26|38/
Понимаю, что это просто, но пока не соображу.

1) С помощью javascript на стороне клиента, т.е. обрабатываем форму с помощью javascript и формируем адрес страницы /seg_1/seg_2/14|25|26|38/ и с помошью location отправляем пользователя.

2) Можно также создать в файл, например redirect.php, его сделать “action” в форме запроса и в нем обработать форму и сделать Header(“location: seg_1/seg_2/14|25|26|38/”);

P.S.
А самое главное включать php в шаблонах ненадо.

Профиль
 
 
Отправлено: 10 Октябрь 2008 08:35 A.M.   [ Игнорировать ]   [ # 10 ]
Администратор
Avatar
RankRankRankRank
Всего сообщений:  1423
Зарегистрирован  2007-12-27
SexKiller - 10 Октябрь 2008 08:19 A.M.
mrtt - 10 Октябрь 2008 07:18 A.M.

Это получается по методу post, т.е. в сегментах ничего не будет.
Как сделать, чтобы с одной страницы (где стоят чекбоксы для выбора категорий), происходил переход на другую страницу, где формируются новости, в соответствии с /seg_1/seg_2/14|25|26|38/
Понимаю, что это просто, но пока не соображу.

1) С помощью javascript на стороне клиента, т.е. обрабатываем форму с помощью javascript и формируем адрес страницы /seg_1/seg_2/14|25|26|38/ и с помошью location отправляем пользователя.

2) Можно также создать в файл, например redirect.php, его сделать “action” в форме запроса и в нем обработать форму и сделать Header(“location: seg_1/seg_2/14|25|26|38/”);

P.S.
А самое главное включать php в шаблонах ненадо.

Опять-таки интересует конечное решение, которое может пригодиться не только мне, но и другим в будущем. smile

 Подпись 

ExpressionEngine - SEO-ориентированный движок

Профиль
 
 
Отправлено: 10 Октябрь 2008 08:39 A.M.   [ Игнорировать ]   [ # 11 ]
Новичок
Avatar
Rank
Всего сообщений:  36
Зарегистрирован  2008-01-09

Сорее всего не будет коненечного решения, т.к. данный функционал не поддается унификации, т.е. одним законченым решением не получится решить несколько задача, все будет зависеть от конкретной задачи.

Профиль
 
 
Отправлено: 10 Октябрь 2008 08:58 A.M.   [ Игнорировать ]   [ # 12 ]
Администратор
Avatar
RankRankRankRank
Всего сообщений:  1423
Зарегистрирован  2007-12-27
SexKiller - 10 Октябрь 2008 08:39 A.M.

Сорее всего не будет коненечного решения, т.к. данный функционал не поддается унификации, т.е. одним законченым решением не получится решить несколько задача, все будет зависеть от конкретной задачи.

я описал конкретную задачу, куда еще конкретнее ))

 Подпись 

ExpressionEngine - SEO-ориентированный движок

Профиль
 
 
Отправлено: 11 Октябрь 2008 12:51 A.M.   [ Игнорировать ]   [ # 13 ]
Member
Avatar
RankRankRank
Всего сообщений:  153
Зарегистрирован  2008-08-19

ну если исходить из того что в подобной ситуации тебе форму всеравно прийдется реализовывать, то я бы выбрал POST-метод.
ну и + URL

Например если у нас скрипт выдал много результатов и их надо разбить на страницы, то передавать сам запрос будем через URL используя переменную, определенную в POST’е

Соответственно формируем URL так:
/site/search/34|3|9|21|/P1

Конечная реализация:

<form action="{path=site/search}" method="post">
 <
div>Отмерьте галочками категории для отфильтрации:</div>
{exp:weblog:categories weblog="weblog" style="linear"}
   
<input type="checkbox" name="category[]" value="{category_id}" /> {category_name}<br />
{/exp:weblog:categories}

<input type="submit" value="Поиск" />
</
form>

<?php
/** Для возможности дальнейшего усложнения вновь построенной поисковой системы я люблю восстанавливать массив POST,
  ** Помним что $_POST это всего-лишь переменная): **/
if( ! isset($_POST['category']) )
{
   $_POST[
'category'= Array();
   
$seg explode("|""{segment_3}"); // Замечательный EE сегменты всегда обрабатывает в первую очередь.
   
foreach( $seg as $s )
      if( 
is_numeric($s) ) $_POST['category'][] $s// Маленькая защита 
}

/* Компоновка запроса */
$cat "";
if( isset(
$_POST['category']) && $_POST['category'!= Array() )
{
   
foreach( $_POST['category'as $c )
      
$cat .= $c."|";
   echo 
"<h2>Найденные статьи:</h2>";
}
else echo "<h2>Все статьи:</h2>";
?>

{
!-- Ну и вывод результатов :) --}
{exp
:weblog:entries weblog="weblog" category="<?=$cat?>paginate="bottom" paginate_base="site/search/<?=$cat?>limit="10" orderby="date"}
<div class="entry">
Статья №{entry_id}<br />
<
a href="{path=site/details/{url_title}}">{title}</a>
</
div>
{paginate}
       
<div class="pager">Страница {pagination_links}</div>
{/paginate}
{if no_results}Ничего не найдено{
/if}
{
/exp:weblog:entries} 

данный пример написал не тестируя, так что если будут где-то ошибки по синтаксису или написанию - правим сами wink

PS: JavaScript считаю не надежным smile

Профиль