LiveInternetMail.ru
Форум русской поддержки Joomla!® CMS
28.05.2012, 00:53:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 1.7 FAQ Joomla 1.5 FAQ Joomla 1.0 FAQ Правила форума Новости Joomla Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор Тема: Сортировка по своему условию.  (Прочитано 2945 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
GoldMan
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 26


« : 28.04.2009, 12:39:51 »

Уважаемые Господа, подскажите, плз, как сортировать записи по своему полю, или по наличии отсутствии инфы в определенном поле. Где-то видел как вывести вперед те записи у которых есть иконки-лого, но перерыл все форумы не могу найти.
Уважте вниманием, пожалуйста.
Записан
Lord Glue
Завсегдатай
*****

Репутация: +65/-0
Offline Offline

Пол: Мужской
Сообщений: 568


добрый пандо


« Ответ #1 : 03.05.2009, 13:41:32 »

в sql запросе, выдирающим все записи, в конец дописать(изменить) ORDER BY имя_поля DESC
Записан
GoldMan
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 26


« Ответ #2 : 04.05.2009, 09:21:31 »

спасибо за ответ.
логику я понимаю, вот, знать бы еще где это искать...
Записан
Lord Glue
Завсегдатай
*****

Репутация: +65/-0
Offline Offline

Пол: Мужской
Сообщений: 568


добрый пандо


« Ответ #3 : 04.05.2009, 10:01:11 »

а мало написано (( Где выводите записи неясно, какое конкретно поле хотите сортировать тоже...конкретизируйте ))
Записан
GoldMan
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 26


« Ответ #4 : 04.05.2009, 10:37:23 »

спасибо.
условие:
-каталог организаций. при регистрации есть варианты - бесплатно, 100баксов, 500баксов и 1000баксов, со своими понтами каждый. Понты прописал в шаблоне листинга. сортировка указана штатными средствами соби - последние добавленные сверху.
задача:
-при обычном показе (листинге) в категориях/подкатегориях и при выводе в поиске сортировать не только последние добавленные сверху, но и чтобы соблюдался приоритет: сначала те что 1000баксов, затем 500, 100, бесплатники.
решение:
-создать поле, например, "пакет" (выпадающий список) с вариантами 1000, 500, 100, free(или любыми удобными).
-к штатной сортировке добавить сортировку по полю "пакет"

Вот. на последнем пункте я и застрял.
если последний пункт реализовать невозможно, то хотябы сортировать так - те, которые имеют логотип, впереди тех, которые без лого (это крайний вариант)
Кстати, тема очень актуальна для многих, так как еще никому не удалось реализовать эту задачу в инете(даже на оф.форуме).
Прошу помощи.
« Последнее редактирование: 04.05.2009, 10:49:54 от GoldMan » Записан
Lord Glue
Завсегдатай
*****

Репутация: +65/-0
Offline Offline

Пол: Мужской
Сообщений: 568


добрый пандо


« Ответ #5 : 04.05.2009, 16:51:11 »

да ладно ))) у меня, например, отлично реализовалась... делал ВИП объекты, и показывал их первыми
стукнись в аську 174ноль4ноль632...
Записан
terveg
Давно я тут
****

Репутация: +17/-0
Offline Offline

Пол: Мужской
Сообщений: 273


ставь "+" руки не отсохнут


« Ответ #6 : 02.10.2010, 01:51:31 »

я наконец-то нашел решение с Вашей помощью! спасибо
Чтобы была сортировка записей в категории по своему полю и дате добавления использовал такой хак:

нашел кусок кода в файле components/com_sobi2/frontend.class.php 909 строка примерно
Цитировать
if ($use_original_catid) { //ermittele die catid vom Eintrag (wenn in mehreren Kategorien, den ersten in DB)
$query = "SELECT DISTINCT relation.itemid, relation.catid, title, owner, image, background, icon FROM `#__sobi2_cat_items_relations` AS relation " .
"LEFT JOIN `#__sobi2_item` AS items ON relation.itemid = items.itemid " .
"WHERE (`published` = '1' AND (relation.catid > 1) AND (`publish_down` > '{$now}' OR `publish_down` = '{$config->nullDate}' ) AND items.itemid IN({$query}) ) " .
"GROUP BY items.itemid ORDER BY {$config->listingOrdering} {$limits}";

заменил на
Цитировать
if ($use_original_catid) { //ermittele die catid vom Eintrag (wenn in mehreren Kategorien, den ersten in DB)      
$query = "SELECT DISTINCT relation.itemid, relation.catid, title, owner, image, background, icon, fieldsdata.fieldid, fieldsdata.data_txt " .
"FROM `#__sobi2_cat_items_relations` AS relation " .
"LEFT JOIN `#__sobi2_item` AS items ON relation.itemid = items.itemid " .
"LEFT JOIN `#__sobi2_fields_data` AS fieldsdata ON items.itemid = fieldsdata.itemid " .
"WHERE (`published` = '1' AND (relation.catid > 1) AND (`publish_down` > '{$now}' OR `publish_down` = '{$config->nullDate}' ) AND items.itemid IN({$query}) AND (fieldsdata.fieldid = 57) AND (fieldsdata.data_txt = 1) ) " .
"GROUP BY items.itemid ORDER BY {$config->listingOrdering},publish_up DESC {$limits}";

и еще в этом же файле ниже
Цитировать
if ($use_original_catid) { //ermittele die catid vom Eintrag (wenn in mehreren Kategorien, den ersten in DB)
$query = "SELECT DISTINCT relation.itemid, relation.catid, title, owner, image, background, icon FROM `#__sobi2_cat_items_relations` AS relation " .
"LEFT JOIN `#__sobi2_item` AS items ON relation.itemid = items.itemid " .
"WHERE ((`catid` = {$catid} {$or}) AND `published` = '1' AND (`publish_down` > '{$now}' OR `publish_down` = '{$config->nullDate}' ) AND items.itemid IN({$query}) ) " .
"GROUP BY items.itemid ORDER BY {$config->listingOrdering} {$limits}";
заменил на
Цитировать
if ($use_original_catid) { //ermittele die catid vom Eintrag (wenn in mehreren Kategorien, den ersten in DB)
$query = "SELECT DISTINCT relation.itemid, relation.catid, title, owner, image, background, icon, fieldsdata.fieldid, fieldsdata.data_txt " .
"FROM `#__sobi2_cat_items_relations` AS relation " .
"LEFT JOIN `#__sobi2_item` AS items ON relation.itemid = items.itemid " .
"LEFT JOIN `#__sobi2_fields_data` AS fieldsdata ON items.itemid = fieldsdata.itemid " .
"WHERE ((`catid` = {$catid} {$or}) AND `published` = '1' AND (`publish_down` > '{$now}' OR `publish_down` = '{$config->nullDate}' ) AND items.itemid IN({$query}) AND (fieldsdata.fieldid = 57) ) " .
"GROUP BY items.itemid ORDER BY {$config->listingOrdering},publish_up DESC {$limits}";

также нужно в файле administrator/components/com_sobi2/includes/adm.helper.class.php под  строкой
Цитировать
$listingOrdering[] = sobiHTML::makeOption('items.publish_down DESC', _SOBI2_CONFIG_GENERAL_SORT_EXP_DESC);
добавить новую строку
Цитировать
$listingOrdering[] = sobiHTML::makeOption('fieldsdata.data_txt DESC','Featured');
где Featured-название вашего поля (по которому сортируете)
57-ID вашего поля (можно найти в админке при редактировании полей)

также в файле components/com_sobi2/axsearch.php строка 342 примерно

под
if ($use_original_catid) { //ermittele die catid vom Eintrag (wenn in mehreren Kategorien, den ersten in DB)
$config->listingOrdering = str_replace( "itemid", 'relation.itemid', $config->listingOrdering );   
нужно заменить         
Цитировать
$query = "SELECT DISTINCT relation.itemid, relation.catid, title, owner, image, background, icon, metadesc, publish_up FROM `#__sobi2_cat_items_relations` AS relation " .
"LEFT JOIN `#__sobi2_item` AS items ON relation.itemid = items.itemid " .
"WHERE (`published` = '1' AND (relation.catid > 1) AND (`publish_down` > '{$now}' OR `publish_down` = '{$config->nullDate}' ) AND items.itemid IN({$whereId}) ) " .
"GROUP BY items.itemid ORDER BY {$config->listingOrdering} {$limits}";

на

Цитировать
$query = "SELECT DISTINCT relation.itemid, relation.catid, title, owner, image, background, icon, metadesc, publish_up, fieldsdata.fieldid, fieldsdata.data_txt " .
"FROM `#__sobi2_cat_items_relations` AS relation " .
"LEFT JOIN `#__sobi2_item` AS items ON relation.itemid = items.itemid " .
"LEFT JOIN `#__sobi2_fields_data` AS fieldsdata ON items.itemid = fieldsdata.itemid " .
"WHERE (`published` = '1' AND (relation.catid > 1) AND (`publish_down` > '{$now}' OR `publish_down` = '{$config->nullDate}' ) AND items.itemid IN({$whereId}) AND (fieldsdata.fieldid = 57) ) " .
"GROUP BY items.itemid ORDER BY {$config->listingOrdering},publish_up DESC {$limits}";

затем в админке выбрать сортировку "Сортировать записи по" полю которое названо Featured
В итоге-первыми выведуться записи которые имеют параметр Featured, затем пойдут обычные, причем те что добавлены последними-сразу под Featured"ми

частично материал взят с первоисточника  http://www.sigsiu.net/forum/index.php?topic=25001.0
еще интерестная темка http://www.sigsiu.net/forum/index.php/topic,15937.0.html
« Последнее редактирование: 03.10.2010, 20:22:36 от terveg » Записан
fomanza
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 83


« Ответ #7 : 13.10.2010, 14:49:27 »

Странно, но после этих действий все записи пропадают и новые не добавляются.
Записан
VaVi
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 8


« Ответ #8 : 20.10.2010, 09:43:24 »

А у меня файла adm.helper.class.php нет.
Есть helper.class.php, но в нем нет выше написанной строки, и записи тоже пропали.
Помогите! ((((
Записан
terveg
Давно я тут
****

Репутация: +17/-0
Offline Offline

Пол: Мужской
Сообщений: 273


ставь "+" руки не отсохнут


« Ответ #9 : 22.10.2010, 15:54:19 »

моя версия RC 2.9.2.4 все работает, будьте внимательны!
Записан
Pechenuha
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 2


« Ответ #10 : 14.02.2011, 09:37:36 »

Что же делать если стоит новая версия, в часности SOBI2 2.9.3.2
В ней отсутствует adm.helper.class.php
Переходить на предыдущие версии каталога что то не хочется, как можно еще отсортировать записи по своим критериям?
Надеюсь на вашу помощь!
Записан
zeroif
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 71


« Ответ #11 : 14.08.2011, 19:32:16 »

Версия 2.9.3.1
Подскажите почему ничего не выводит. Все сделал как terveg в файле components/com_sobi2/frontend.class.php
Код:
if ($this->totalResults) {
/*
    * if listing should be shown on front page get all published items
    */
if ($catid == 0 && $config->showListingOnFp) { //ich brauche hier noch ne catid
$config->listingOrdering = str_replace ( "relation.", "items.", $config->listingOrdering );
if ($use_original_catid) { //ermittele die catid vom Eintrag (wenn in mehreren Kategorien, den ersten in DB)      
$query = "SELECT DISTINCT relation.itemid, relation.catid, title, owner, image, background, icon, fieldsdata.fieldid, fieldsdata.data_txt " .
"FROM `#__sobi2_cat_items_relations` AS relation " .
"LEFT JOIN `#__sobi2_item` AS items ON relation.itemid = items.itemid " .
"LEFT JOIN `#__sobi2_fields_data` AS fieldsdata ON items.itemid = fieldsdata.itemid " .
"WHERE (`published` = '1' AND (relation.catid > 1) AND (`publish_down` > '{$now}' OR `publish_down` = '{$config->nullDate}' ) AND items.itemid IN({$query}) AND (fieldsdata.fieldid = '31') ) " .
"GROUP BY items.itemid ORDER BY {$config->listingOrdering} {$limits}";
} else { //Eintr?ge aus allen Kategorien
$query = "SELECT itemid, title, owner, image, icon, background FROM `#__sobi2_item` AS items " .
"WHERE (`published` = 1 AND (`publish_down` > '{$now}' OR `publish_down` = '{$config->nullDate}' ) AND  items.itemid IN({$query}) ) " .
"ORDER BY {$config->listingOrdering} {$limits}";
}
} else if ($catid != 0) {
/* if show listing in category */
if ($use_original_catid) { //ermittele die catid vom Eintrag (wenn in mehreren Kategorien, den ersten in DB)
$query = "SELECT DISTINCT relation.itemid, relation.catid, title, owner, image, background, icon, fieldsdata.fieldid, fieldsdata.data_txt " .
"FROM `#__sobi2_cat_items_relations` AS relation " .
"LEFT JOIN `#__sobi2_item` AS items ON relation.itemid = items.itemid " .
"LEFT JOIN `#__sobi2_fields_data` AS fieldsdata ON items.itemid = fieldsdata.itemid " .
"WHERE ((`catid` = {$catid} {$or}) AND `published` = '1' AND (`publish_down` > '{$now}' OR `publish_down` = '{$config->nullDate}' ) AND items.itemid IN({$query}) AND (fieldsdata.fieldid = '31') ) " .
"GROUP BY items.itemid ORDER BY {$config->listingOrdering} {$limits}";
} else { //catid des Eintrages nicht verwenden
$query = "SELECT DISTINCT relation.itemid, title, owner, image, background, icon FROM `#__sobi2_cat_items_relations` AS relation " .
"LEFT JOIN `#__sobi2_item` AS items ON relation.itemid = items.itemid " .
"WHERE ((`catid` = {$catid} {$or}) AND `published` = '1' AND (`publish_down` > '{$now}' OR `publish_down` = '{$config->nullDate}' ) AND items.itemid IN({$query}) ) " .
"ORDER BY {$config->listingOrdering} {$limits}";
}
}
$database->setQuery ( $query );
$results = $database->loadObjectList ();

if ($database->getErrorNum ()) {
trigger_error ( "frontend::buildListing(): DB reports: " . $database->stderr (), E_USER_WARNING );
}
}

В админке создал поле с айди 31, выбрал его в параметрах сортировки
« Последнее редактирование: 14.08.2011, 21:37:03 от zeroif » Записан
zeroif
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 71


« Ответ #12 : 23.08.2011, 11:19:52 »

Кто то использовал Ordering Plugin for Sobi2, есть там сортировка по двум полям?
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Рейтинг@Mail.ru Rambler Top100 Powered by SMF 1.1.16 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet