Attached Files |
sticky_relevance_sorting_core.patch [^] (8,012 bytes) 2012-05-18 05:15
[Show Content]
Index: kernel/db/cat_event_handler.php
===================================================================
--- kernel/db/cat_event_handler.php (revision 15338)
+++ kernel/db/cat_event_handler.php (working copy)
@@ -368,7 +368,6 @@
$this->clearSelectedIDs($event);
}
-
/**
* Return type clauses for list bulding on front
*
@@ -442,13 +441,12 @@
/* @var $object kDBList */
$search_sql = ' FROM ' . TABLE_PREFIX . 'ses_' . $this->Application->GetSID() . '_' . TABLE_PREFIX . 'Search
- search_result LEFT JOIN %1$s ON %1$s.ResourceId = search_result.ResourceId';
+ search_result JOIN %1$s ON %1$s.ResourceId = search_result.ResourceId';
$sql = str_replace('FROM %1$s', $search_sql, $object->GetPlainSelectSQL());
$object->SetSelectSQL($sql);
$object->addCalculatedField('Relevance', 'search_result.Relevance');
- $object->AddOrderField('search_result.Relevance', 'desc', true);
$type_clauses['search']['include'] = 'PrimaryCat = 1 AND ('.TABLE_PREFIX.'Categories.Status = '.STATUS_ACTIVE.')';
$type_clauses['search']['except'] = 'PrimaryCat = 1 AND ('.TABLE_PREFIX.'Categories.Status = '.STATUS_ACTIVE.')';
@@ -666,7 +664,6 @@
$object->addFilter('perm_filter', 'perm.PermId = '.$view_perm);
-
$types = $event->getEventParam('types');
$this->applyItemStatusFilter($object, $types);
@@ -1325,7 +1322,6 @@
$this->Application->SetVar('do_not_drop_search_table', true);
}
-
$search_table_exists = $this->Conn->Query('SHOW TABLES LIKE "'.$search_table.'"');
if ($search_table_exists) {
$select_intro = 'INSERT INTO '.$search_table.' (Relevance, ItemId, ResourceId, ItemType, EdPick) ';
@@ -1336,7 +1332,6 @@
$edpick_clause = $this->Application->getUnitOption($event->Prefix.'.EditorsPick', 'Fields') ? $items_table.'.EditorsPick' : '0';
-
$sql = $select_intro.' SELECT '.$relevance_clause.' AS Relevance,
'.$items_table.'.'.$this->Application->getUnitOption($event->Prefix, 'IDField').' AS ItemId,
'.$items_table.'.ResourceId,
@@ -2697,6 +2692,38 @@
$event->setEventParam('same_special', true);
}
+ $types = $event->getEventParam('types');
+ $types = $types ? explode(',', $types) : Array ();
+
+ if ( in_array('search', $types) ) {
+ $event->setPseudoClass('_List');
+
+ $object = $event->getObject();
+ /* @var $object kDBList */
+
+ // 1. no user sorting - sort by relevance
+ if ( $object->isMainList() ) {
+ if ( !$this->Application->GetVar('sort_by') ) {
+ $this->Application->SetVar('sort_by', 'Relevance,desc');
+ }
+ }
+ else {
+ $sorting_settings = $this->getListSetting($event, 'Sortings');
+
+ if ( !trim(getArrayValue($sorting_settings, 'Sort1') . ',' . getArrayValue($sorting_settings, 'Sort1_Dir'), ',') ) {
+ $event->setEventParam('sort_by', 'Relevance,desc');
+ }
+ }
+
+ // 2. remove default sortings
+ $config_mapping = $this->Application->getUnitOption($event->Prefix, 'ConfigMapping');
+ unset($config_mapping['DefaultSorting1Field']);
+ $this->Application->setUnitOption($event->Prefix, 'ConfigMapping', $config_mapping);
+
+ // 2. remove forced sortings
+ $this->Application->setUnitOption($event->Prefix, 'ListSortings', Array ());
+ }
+
parent::SetSorting($event);
}
Index: units/categories/categories_config.php
===================================================================
--- units/categories/categories_config.php (revision 15338)
+++ units/categories/categories_config.php (working copy)
@@ -341,7 +341,6 @@
'ModifiedById' => Array ('type' => 'int', 'formatter' => 'kLEFTFormatter', 'error_msgs' => Array ('invalid_option' => '!la_error_UserNotFound!'), 'options' => Array (USER_ROOT => 'root', USER_GUEST => 'Guest'),'left_sql'=>'SELECT %s FROM '.TABLE_PREFIX.'Users WHERE `%s` = \'%s\'', 'left_key_field' => 'PortalUserId', 'left_title_field' => 'Username', 'default' => NULL),
'CachedTemplate' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
-
// fields from Pages
'Template' => Array (
'type' => 'string',
@@ -427,6 +426,7 @@
),
'VirtualFields' => Array (
+ 'Relevance' => Array ('type' => 'float', 'default' => 0),
'CurrentSort' => Array('type' => 'string', 'default' => ''),
'IsNew' => Array('type' => 'int', 'default' => 0),
'OldPriority' => Array('type' => 'int', 'default' => 0),
Index: units/categories/categories_event_handler.php
===================================================================
--- units/categories/categories_event_handler.php (revision 15338)
+++ units/categories/categories_event_handler.php (working copy)
@@ -536,13 +536,12 @@
/* @var $object kDBList */
$search_sql = ' FROM ' . TABLE_PREFIX . 'ses_' . $this->Application->GetSID() . '_' . TABLE_PREFIX . 'Search
- search_result LEFT JOIN %1$s ON %1$s.ResourceId = search_result.ResourceId';
+ search_result JOIN %1$s ON %1$s.ResourceId = search_result.ResourceId';
$sql = str_replace('FROM %1$s', $search_sql, $object->GetPlainSelectSQL());
$object->SetSelectSQL($sql);
$object->addCalculatedField('Relevance', 'search_result.Relevance');
- $object->AddOrderField('search_result.Relevance', 'desc', true);
$type_clauses['search']['include'] = '1';
$type_clauses['search']['except'] = '0';
@@ -1460,7 +1459,12 @@
protected function getPerPage(kEvent $event)
{
if ( !$this->Application->isAdmin ) {
+ $same_special = $event->getEventParam('same_special');
$event->setEventParam('same_special', true);
+
+ $per_page = parent::getPerPage($event);
+
+ $event->setEventParam('same_special', $same_special);
}
return parent::getPerPage($event);
@@ -1577,6 +1581,51 @@
return true;
}
+ /**
+ * Set's correct sorting for list based on data provided with event
+ *
+ * @param kEvent $event
+ * @return void
+ * @access protected
+ * @see kDBEventHandler::OnListBuild()
+ */
+ protected function SetSorting(kEvent $event)
+ {
+ $types = $event->getEventParam('types');
+ $types = $types ? explode(',', $types) : Array ();
+
+ if ( in_array('search', $types) ) {
+ $event->setPseudoClass('_List');
+
+ $object = $event->getObject();
+ /* @var $object kDBList */
+
+ // 1. no user sorting - sort by relevance
+ if ( $object->isMainList() ) {
+ if ( !$this->Application->GetVar('sort_by') ) {
+ $this->Application->SetVar('sort_by', 'Relevance,desc');
+ }
+ }
+ else {
+ $sorting_settings = $this->getListSetting($event, 'Sortings');
+
+ if ( !trim(getArrayValue($sorting_settings, 'Sort1') . ',' . getArrayValue($sorting_settings, 'Sort1_Dir'), ',') ) {
+ $event->setEventParam('sort_by', 'Relevance,desc');
+ }
+ }
+
+ // 2. remove default sortings
+ $config_mapping = $this->Application->getUnitOption($event->Prefix, 'ConfigMapping');
+ unset($config_mapping['DefaultSorting1Field']);
+ $this->Application->setUnitOption($event->Prefix, 'ConfigMapping', $config_mapping);
+
+ // 2. remove forced sortings
+ $this->Application->setUnitOption($event->Prefix, 'ListSortings', Array ());
+ }
+
+ parent::SetSorting($event);
+ }
+
// ============= for cms page processing =======================
/**
@@ -2515,7 +2564,6 @@
$this->Application->SetVar('do_not_drop_search_table', true);
}
-
$search_table_exists = $this->Conn->Query('SHOW TABLES LIKE "'.$search_table.'"');
if ($search_table_exists) {
$select_intro = 'INSERT INTO '.$search_table.' (Relevance, ItemId, ResourceId, ItemType, EdPick) ';
@@ -2526,7 +2574,6 @@
$edpick_clause = $this->Application->getUnitOption($event->Prefix.'.EditorsPick', 'Fields') ? $items_table.'.EditorsPick' : '0';
-
$sql = $select_intro.' SELECT '.$relevance_clause.' AS Relevance,
'.$items_table.'.'.$this->Application->getUnitOption($event->Prefix, 'IDField').' AS ItemId,
'.$items_table.'.ResourceId,
sticky_relevance_sorting_modules.patch [^] (2,873 bytes) 2012-05-18 05:15
[Show Content]
Index: in-bulletin/units/topics/topics_config.php
===================================================================
--- in-bulletin/units/topics/topics_config.php (revision 15331)
+++ in-bulletin/units/topics/topics_config.php (working copy)
@@ -456,6 +456,7 @@
),
'VirtualFields' => Array (
+ 'Relevance' => Array ('type' => 'float', 'default' => 0),
'UserName' => Array ('type' => 'string', 'default' => ''),
'CategoryId' => Array (
'type' => 'int',
Index: in-commerce/units/products/products_config.php
===================================================================
--- in-commerce/units/products/products_config.php (revision 15331)
+++ in-commerce/units/products/products_config.php (working copy)
@@ -561,6 +561,7 @@
),
'VirtualFields' => Array (
+ 'Relevance' => Array ('type' => 'float', 'default' => 0),
'Qty' => Array ('type' => 'int', 'formatter' => 'kFormatter', 'regexp' => '/^[\d]+$/', 'default' => 0),
'Price' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%.2f', 'default' => NULL),
'Cost' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%.2f', 'default' => NULL),
Index: in-link/units/links/links_config.php
===================================================================
--- in-link/units/links/links_config.php (revision 15331)
+++ in-link/units/links/links_config.php (working copy)
@@ -423,7 +423,6 @@
),
),
-
'ListSQLs' => Array ( '' => ' SELECT %1$s.* %2$s
FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'%3$sCategoryItems ON '.TABLE_PREFIX.'%3$sCategoryItems.ItemResourceId = %1$s.ResourceId
@@ -505,6 +504,7 @@
),
'VirtualFields' => Array (
+ 'Relevance' => Array ('type' => 'float', 'default' => 0),
'UserName' => Array ('type' => 'string', 'default' => ''),
'DupeCount' => Array ('type' => 'string', 'default' => ''),
@@ -637,7 +637,6 @@
),
),
-
'ConfigMapping' => Array (
'PerPage' => 'Perpage_Links',
'ShortListPerPage' => 'Perpage_Links_Short',
Index: in-news/units/articles/articles_config.php
===================================================================
--- in-news/units/articles/articles_config.php (revision 15331)
+++ in-news/units/articles/articles_config.php (working copy)
@@ -446,6 +446,7 @@
),
'VirtualFields' => Array (
+ 'Relevance' => Array ('type' => 'float', 'default' => 0),
'MoreCategories' => Array ('type' => 'string', 'default' => ''),
'UserName' => Array ('type' => 'string', 'default' => ''),
@@ -533,7 +534,6 @@
),
),
-
'Radio' => Array (
'Icons' => Array (
0 => 'icon16_article_disabled.png',
sticky_relevance_sorting_themes.patch [^] (6,607 bytes) 2012-05-18 05:15
[Show Content]
Index: advanced/in-commerce/elements/sorting.elm.tpl
===================================================================
--- advanced/in-commerce/elements/sorting.elm.tpl (revision 15331)
+++ advanced/in-commerce/elements/sorting.elm.tpl (working copy)
@@ -1,5 +1,5 @@
<!--## SORTING TEMPLATE FOR IN-COMMERCE ##-->
-
+<inp2:m_DefaultParam is_search="0"/>
<table class="fullwidth">
<tr>
<td class="category-statistics">
@@ -21,6 +21,11 @@
<inp2:m_Phrase label="lu_SortProductsBy"/>:
<select class="input-select" name="<inp2:p_CombinedSortingDropDownName/>">
+ <inp2:m_if check="m_Param" name="is_search">
+ <option value="Relevance|asc" <inp2:p_SortingSelected sorting="Relevance|asc" selected='selected="selected"'/>> <inp2:m_Phrase label="lu_RelevanceAZ"/></option>
+ <option value="Relevance|desc" <inp2:p_SortingSelected sorting="Relevance|desc" selected='selected="selected"'/>> <inp2:m_Phrase label="lu_RelevanceZA"/></option>
+ </inp2:m_if>
+
<option value="Name|asc" <inp2:p_SortingSelected sorting="l1_Name|asc" selected='selected="selected"'/>> <inp2:m_Phrase label="lu_comm_NameAZ"/></option>
<option value="Name|desc" <inp2:p_SortingSelected sorting="l1_Name|desc" selected='selected="selected"'/>> <inp2:m_Phrase label="lu_comm_NameZA"/></option>
<option value="Manufacturer|asc" <inp2:p_SortingSelected sorting="Manufacturer|asc" selected='selected="selected"'/>> <inp2:m_Phrase label="lu_comm_ManufAZ"/></option>
Index: advanced/in-commerce/products/search_results.tpl
===================================================================
--- advanced/in-commerce/products/search_results.tpl (revision 15331)
+++ advanced/in-commerce/products/search_results.tpl (working copy)
@@ -49,7 +49,7 @@
<inp2:m_Phrase label="lu_title_ProductSearchResults"/> (<inp2:p_TotalRecords list_name="product_search_results"/>)
</inp2:m_Capture>
- <inp2:m_include template="in-commerce/elements/sorting.elm" list_name="product_search_results"/>
+ <inp2:m_include template="in-commerce/elements/sorting.elm" list_name="product_search_results" is_search="1"/>
<inp2:m_include template="in-commerce/elements/products.elm"/>
<inp2:m_include template="platform/elements/search_results.elm"/>
Index: advanced/in-link/elements/sorting.elm.tpl
===================================================================
--- advanced/in-link/elements/sorting.elm.tpl (revision 15331)
+++ advanced/in-link/elements/sorting.elm.tpl (working copy)
@@ -1,3 +1,4 @@
+<inp2:m_DefaultParam is_search="0"/>
<table class="fullwidth">
<tr>
<td class="category-statistics">
@@ -19,6 +20,11 @@
<inp2:m_Phrase label="lu_SortLinksBy"/>:
<select class="input-select" name="<inp2:l_CombinedSortingDropDownName/>">
+ <inp2:m_if check="m_Param" name="is_search">
+ <option value="Relevance|asc" <inp2:l_SortingSelected sorting="Relevance|asc" selected='selected="selected"'/>> <inp2:m_Phrase label="lu_RelevanceAZ"/></option>
+ <option value="Relevance|desc" <inp2:l_SortingSelected sorting="Relevance|desc" selected='selected="selected"'/>> <inp2:m_Phrase label="lu_RelevanceZA"/></option>
+ </inp2:m_if>
+
<option value="Name|asc" <inp2:l_SortingSelected sorting="Name|asc" selected='selected="selected"'/>> <inp2:m_Phrase label="lu_LinkNameAZ"/></option>
<option value="Name|desc" <inp2:l_SortingSelected sorting="Name|desc" selected='selected="selected"'/>> <inp2:m_Phrase label="lu_LinkNameZA"/></option>
<option value="CreatedOn|asc" <inp2:l_SortingSelected sorting="CreatedOn|asc" selected='selected="selected"'/>> <inp2:m_Phrase label="lu_RecentToOld"/></option>
Index: advanced/in-link/links/search_results.tpl
===================================================================
--- advanced/in-link/links/search_results.tpl (revision 15331)
+++ advanced/in-link/links/search_results.tpl (working copy)
@@ -51,7 +51,7 @@
<inp2:m_Phrase label="lu_title_LinkSearchResults"/> (<inp2:l_TotalRecords list_name="link_search_results"/>)
</inp2:m_Capture>
- <inp2:m_include template="in-link/elements/sorting.elm" list_name="link_search_results"/>
+ <inp2:m_include template="in-link/elements/sorting.elm" list_name="link_search_results" is_search="1"/>
<inp2:m_include template="in-link/elements/links.elm"/>
<inp2:m_include template="platform/elements/search_results.elm"/>
Index: advanced/in-news/articles/search_results.tpl
===================================================================
--- advanced/in-news/articles/search_results.tpl (revision 15331)
+++ advanced/in-news/articles/search_results.tpl (working copy)
@@ -49,7 +49,7 @@
<inp2:m_Phrase label="lu_title_ArticleSearchResults"/> (<inp2:n_TotalRecords list_name="article_search_results"/>)
</inp2:m_Capture>
- <inp2:m_include template="in-news/elements/sorting.elm" list_name="article_search_results"/>
+ <inp2:m_include template="in-news/elements/sorting.elm" list_name="article_search_results" is_search="1"/>
<inp2:m_include template="in-news/elements/articles.elm"/>
<inp2:m_include template="platform/elements/search_results.elm"/>
Index: advanced/in-news/elements/sorting.elm.tpl
===================================================================
--- advanced/in-news/elements/sorting.elm.tpl (revision 15331)
+++ advanced/in-news/elements/sorting.elm.tpl (working copy)
@@ -1,3 +1,4 @@
+<inp2:m_DefaultParam is_search="0"/>
<table class="fullwidth">
<tr>
<td class="category-statistics">
@@ -19,6 +20,11 @@
<inp2:m_Phrase label="lu_SortArticlesBy"/>:
<select name="<inp2:n_CombinedSortingDropDownName/>" class="input-select">
+ <inp2:m_if check="m_Param" name="is_search">
+ <option value="Relevance|asc" <inp2:n_SortingSelected sorting="Relevance|asc" selected='selected="selected"'/>> <inp2:m_Phrase label="lu_RelevanceAZ"/></option>
+ <option value="Relevance|desc" <inp2:n_SortingSelected sorting="Relevance|desc" selected='selected="selected"'/>> <inp2:m_Phrase label="lu_RelevanceZA"/></option>
+ </inp2:m_if>
+
<option value="Title|asc" <inp2:n_SortingSelected sorting="Title|asc" selected='selected="selected"'/>> <inp2:m_Phrase label="lu_ArticleTitleAZ"/></option>
<option value="Title|desc" <inp2:n_SortingSelected sorting="Title|desc" selected='selected="selected"'/>> <inp2:m_Phrase label="lu_ArticleTitleZA"/></option>
<option value="CreatedOn|asc" <inp2:n_SortingSelected sorting="CreatedOn|asc" selected='selected="selected"'/>> <inp2:m_Phrase label="lu_RecentToOld"/></option>
|