{{indexmenu_n>500}} ====== RELATEDX ====== ===== {RELATEDX:list count : keywords : cat-ID} ===== Enhanced by KH (flip-flop) Docu: [[http://www.phpwcms-docu.de/link_tags.phtml]] Forum: -- Tag: **{RELATEDX:list_count : keywords : category-ID}** is a "cut out frontend snippet" enhanced for a search below a given level. You can use it e.g. for multilingual sites. Up to **version 1.21** no articles will be searched in hidden categories, from **version 1.3**, this can be set in the script. Formatting and Sorting is set in the section ##%%// related articles based on keywords%%## in the file **config/phpwcms/conf.template_default.inc.php**. \\ Filename: **rt_relatedx.php** Location: **/template/inc_script/frontend_render/rt_relatedx.php** **Condition:** ##$phpwcms['allow_ext_render'] = 1;## -> [[http://www.phpwcms-docu.de/confincphp_de.phtml|/config/phpwcms/conf.inc.php]] ---- ---- \\ Please always fill out all fields: e.g. \\ * **{RELATEDX:0:tip,top,flip,flop:0}** -> //Search beginning at cad-ID=0 = home// * **{RELATEDX:5:tip,top,flip,flop:2}** -> //Output of first 5 entries, search beginning at cad-ID=2// E.g.: Given structure ------------------------------------ L E V E L .: : : : .0 1 2 3 <- LEVEL-Nr. .: : : : -+ home : ID=0 -+--+ category_01 ID=01 -+--+ category_02 ID=02 -+--+--+ category_02_01 ID=04 -+--+--+--+ category_02_01_01 ID=06 -+--+--+--+ category_02_01_02 ID=07 -+--+--+ category_02_01 ID=05 -+--+--+ category_02_02 ID=08 -+--+ category_03 ID=03 -+--+ category_04 ID=09 .: : : : .0 1 2 3 <- LEVEL Nr. ------------------------------------ **{RELATEDX:5:tip,top,flip,flop:2}** -> Output: The title link of the first five visible keyword matching articles, at non hidden category_02 (ID=2). //("not hidden" see note above and V1.3)//. \\ ==== V 1.0 ==== 20.01.11 KH Update: Errors have been corrected. **Please use since r400 the new version 1.1 !!** Search beginning behind cad-ID=0 = home {RELATEDX:5:tip,top,flip,flop:2} -> Output first 5 entries, search beginning behind cad-ID=2 *************************************************************************************/ // ---------------------------------------------------------------------------------- // obligate check for phpwcms constants if (!defined('PHPWCMS_ROOT')) {die("You Cannot Access This Script Directly, Have a Nice Day.");} // ---------------------------------------------------------------------------------- // related articles based on keywords, inspired by Magnar Stav Johanssen if(strpos($content["all"],'{RELATEDX:') !== false) { if (!$no_content_for_this_page && !empty($content["articles"][$aktion[1]]["article_keyword"])) { $related_keywords = $content["articles"][$aktion[1]]["article_keyword"]; } else { $related_keywords = ''; } // ------------------------------------------------------------- // $content["all"] = preg_replace('/\{RELATEDX:(\d+):(.*?):(\d+)\}/e','my_get_related_articles("$2",$GLOBALS["aktion"][1],$GLOBALS["template_default"]["related"],"$1",$GLOBALS["db"], "$3");',$content["all"]); function buildStruct_TopDown($start=0) { static $my_cat_id = ''; $struct = getStructureChildData($start); foreach($struct as $value) { buildStruct_TopDown($value['acat_id']); $my_cat_id .= $my_cat_id != '' ? ','.$value['acat_id'] : $value['acat_id']; // echo '||'.$value['acat_id'].' ,'; } return $my_cat_id; } // ================================================================= function my_get_related_articles($keywords, $current_article_id, $template_default, $max_cnt_links=0, $dbcon ,$cat_id) { // find keyword for current article used for RELATED replacementtag // prepared and inspired by Magnar Stav Johanssen $cat_id = buildStruct_TopDown($cat_id); // find all permitted IDs behind $cat_id $keyword_links = ""; $max_cnt_links = intval($max_cnt_links); $keywords = str_replace("ALLKEYWORDS", $GLOBALS['content']['all_keywords'].',', $keywords); // replace unwanted chars and convert to wanted $keywords = str_replace(";", ",", $keywords); $keywords = str_replace("'", "", $keywords); $keywords = str_replace(" ", ",", $keywords); $keywords = str_replace(",,", ",", $keywords); // choose comma separated keywords $keywordarray = explode (",", $keywords); $keywordarray = array_map('trim', $keywordarray); $keywordarray = array_diff($keywordarray, array('')); $keywordarray = array_unique($keywordarray); $keywordarray = array_map('strtoupper', $keywordarray); // check for empty keywords or keywords smaller than 3 chars if(is_array($keywordarray) && count($keywordarray)) { foreach($keywordarray as $key => $value) { if(substr($keywordarray[$key], 0, 1) == '-') { $doNotUse = substr($keywordarray[$key], 1); foreach($keywordarray as $key2 => $value2) { if($doNotUse == $value2) { unset($keywordarray[$key2]); unset($keywordarray[$key]); } } } if(isset($keywordarray[$key]) && (strlen($keywordarray[$key]) < 3 || empty($keywordarray[$key]))) { unset($keywordarray[$key]); } } } if(is_array($keywordarray) && count($keywordarray)) { $where = ""; foreach($keywordarray as $value) { //build where keyword = blabla $where .= ($where) ? " OR " : ""; //replace every "'" to "''" for security reasons with aporeplace() $where .= "article_keyword LIKE '%".aporeplace($value)."%'"; } $limit = ($max_cnt_links) ? " LIMIT ".$max_cnt_links : ""; $sql = "SELECT article_id, article_title, article_cid, article_subtitle, article_summary, article_alias "; $sql .= "FROM ".DB_PREPEND."phpwcms_article WHERE article_deleted=0 AND "; $sql .= "article_id<>".intval($current_article_id)." AND "; $sql .= "article_cid IN (".$cat_id.") AND "; // VISIBLE_MODE: 0 = frontend (all) mode, 1 = article user mode, 2 = admin user mode switch(VISIBLE_MODE) { case 0: $sql .= "article_public=1 AND article_aktiv=1 AND "; break; case 1: $sql .= "article_uid=".$_SESSION["wcs_user_id"]." AND "; break; //case 2: admin mode no additional neccessary } $sql .= "article_begin < NOW() AND article_end > NOW() AND (".$where.") "; if(empty($template_default['sort_by'])) $template_default['sort_by'] = ''; switch($template_default['sort_by']) { case 'title_asc': $sql .= "ORDER BY article_title"; break; case 'title_desc': $sql .= "ORDER BY article_title DESC"; break; case 'ldate_asc': $sql .= "ORDER BY article_begin"; break; case 'ldate_desc': $sql .= "ORDER BY article_begin DESC"; break; case 'kdate_asc': $sql .= "ORDER BY article_end"; break; case 'kdate_desc': $sql .= "ORDER BY article_end DESC"; break; case 'cdate_asc': $sql .= "ORDER BY article_created"; break; case 'cdate_desc': $sql .= "ORDER BY article_created DESC"; break; default: $sql .= "ORDER BY article_tstamp DESC"; } $sql .= $limit; // related things $target = ($template_default["link_target"]) ? ' target="'.$template_default["link_target"].'"' : ""; if($result = _dbQuery($sql)) { $count_results = count($result); $count = 0; foreach($result as $value) { $count++; if($template_default["link_length"] && strlen($value['article_title']) > $template_default["link_length"]) { $article_title = substr($value['article_title'], 0, $template_default["link_length"]).$template_default["cut_title_add"]; } else { $article_title = $value['article_title']; } $keyword_links .= $template_default["link_before"].$template_default["link_symbol"]; $keyword_links .= '".html_specialchars($article_title).""; //try to remove possible unwanted after - if not enclosed before.link.after if($keyword_links && !$template_default["link_before"] && $count < $count_results) { $keyword_links .= $template_default["link_after"]; } } } } //enclose whole if($keyword_links) $keyword_links = $template_default["before"].$keyword_links.$template_default["after"]; return $keyword_links; } $content["all"] = preg_replace('/\{RELATEDX:(\d+)\}/e','get_related_articles($related_keywords,$aktion[1],$template_default["related"],"$1",$db);',$content["all"]); $content["all"] = preg_replace('/\{RELATEDX:(\d+):(.*?):(\d+)\}/e','my_get_related_articles("$2",$aktion[1],$template_default["related"],"$1",$db, "$3");',$content["all"]); } ?> \\ ==== V 1.1 ==== 20.01.11 KH changed: (r400: [[http://code.google.com/p/phpwcms/source/detail?r=400&path=/trunk/include/inc_front/front.func.inc.php|Solve redirect problem with {NEW:..} and {RELATED:...}]]) \\ 22.01.11 KH Update: The root category is now included in the result. If this doesn't fit your needs, please uncomment the line after ##%%// PATCH01%%##. \\ 25.01.11 KH Update: Error correction in funktion [[english/technics/internal-function-call/category-top-down|buildStruct_TopDown]]. With more than one RT call, the old (previous) data of the first RT were available again for the following RTs. Search beginning behind cad-ID=0 = home {RELATEDX:5:tip,top,flip,flop:2} -> Output first 5 entries, search beginning behind cad-ID=2 V 1.1 20.01.11 KH - Update: Last version don´t work right in newer CMS vrsions (since r400). http://code.google.com/p/phpwcms/source/detail?r=400&path=/trunk/include/inc_front/front.func.inc.php 22.01.11 KH : Start category in result 25.01.11 KH : Error correction in function buildStruct_TopDown *************************************************************************************/ // ---------------------------------------------------------------------------------- // obligate check for phpwcms constants if (!defined('PHPWCMS_ROOT')) {die("You Cannot Access This Script Directly, Have a Nice Day.");} // ---------------------------------------------------------------------------------- // related articles based on keywords, inspired by Magnar Stav Johanssen if(strpos($content["all"],'{RELATEDX:') !== false) { if (!$no_content_for_this_page && !empty($content["articles"][$aktion[1]]["article_keyword"])) { $related_keywords = $content["articles"][$aktion[1]]["article_keyword"]; } else { $related_keywords = ''; } // ------------------------------------------------------------- function buildStruct_TopDown($start=0, &$my_cat_id='') { // KH: V1.1 25.01.2011 $struct = getStructureChildData($start); foreach($struct as $value) { // buildStruct_TopDown($value['acat_id'],$my_cat_id); $my_cat_id .= ($my_cat_id != '') ? ','.$value['acat_id'] : $value['acat_id']; buildStruct_TopDown($value['acat_id'],$my_cat_id); // echo '||'.$value['acat_id'].' ,'; } return $my_cat_id; } // ================================================================= function my_get_related_articles($keywords, $current_article_id, $template_default, $max_cnt_links=0, $dbcon ,$cat_id) { // find keyword for current article used for RELATED replacementtag // prepared and inspired by Magnar Stav Johanssen $temp = buildStruct_TopDown($cat_id); // find all permitted IDs behind $cat_id if (!empty($temp)) $cat_id = $cat_id.','.$temp; // +KH: 20.01.11 add start category // PATCH01 // $cat_id = $temp; // If you don´t need the start cat in result $keyword_links = ""; $max_cnt_links = intval($max_cnt_links); $keywords = str_replace("ALLKEYWORDS", $GLOBALS['content']['all_keywords'].',', $keywords); // replace unwanted chars and convert to wanted $keywords = str_replace(";", ",", $keywords); $keywords = str_replace("'", "", $keywords); $keywords = str_replace(" ", ",", $keywords); $keywords = str_replace(",,", ",", $keywords); // choose comma separated keywords $keywordarray = explode (",", $keywords); $keywordarray = array_map('trim', $keywordarray); $keywordarray = array_diff($keywordarray, array('')); $keywordarray = array_unique($keywordarray); $keywordarray = array_map('strtoupper', $keywordarray); // check for empty keywords or keywords smaller than 3 chars if(is_array($keywordarray) && count($keywordarray)) { foreach($keywordarray as $key => $value) { if(substr($keywordarray[$key], 0, 1) == '-') { $doNotUse = substr($keywordarray[$key], 1); foreach($keywordarray as $key2 => $value2) { if($doNotUse == $value2) { unset($keywordarray[$key2]); unset($keywordarray[$key]); } } } if(isset($keywordarray[$key]) && (strlen($keywordarray[$key]) < 3 || empty($keywordarray[$key]))) { unset($keywordarray[$key]); } } } if(is_array($keywordarray) && count($keywordarray)) { $where = ""; foreach($keywordarray as $value) { //build where keyword = blabla $where .= ($where) ? " OR " : ""; //replace every "'" to "''" for security reasons with aporeplace() $where .= "article_keyword LIKE '%".aporeplace($value)."%'"; } $limit = ($max_cnt_links) ? " LIMIT ".$max_cnt_links : ""; // -KH:200111 // $sql = "SELECT article_id, article_title, article_cid, article_subtitle, article_summary, article_alias "; // +KH:200111 $sql = "SELECT article_id, article_title, article_cid, article_subtitle, article_summary, article_alias, article_redirect, article_morelink "; $sql .= "FROM ".DB_PREPEND."phpwcms_article WHERE article_deleted=0 AND "; $sql .= "article_id<>".intval($current_article_id)." AND "; $sql .= "article_cid IN (".$cat_id.") AND "; // VISIBLE_MODE: 0 = frontend (all) mode, 1 = article user mode, 2 = admin user mode switch(VISIBLE_MODE) { case 0: $sql .= "article_public=1 AND article_aktiv=1 AND "; break; case 1: $sql .= "article_uid=".$_SESSION["wcs_user_id"]." AND "; break; //case 2: admin mode no additional neccessary } $sql .= "article_begin < NOW() AND article_end > NOW() AND (".$where.") "; if(empty($template_default['sort_by'])) $template_default['sort_by'] = ''; switch($template_default['sort_by']) { case 'title_asc': $sql .= "ORDER BY article_title"; break; case 'title_desc': $sql .= "ORDER BY article_title DESC"; break; case 'ldate_asc': $sql .= "ORDER BY article_begin"; break; case 'ldate_desc': $sql .= "ORDER BY article_begin DESC"; break; case 'kdate_asc': $sql .= "ORDER BY article_end"; break; case 'kdate_desc': $sql .= "ORDER BY article_end DESC"; break; case 'cdate_asc': $sql .= "ORDER BY article_created"; break; case 'cdate_desc': $sql .= "ORDER BY article_created DESC"; break; default: $sql .= "ORDER BY article_tstamp DESC"; } $sql .= $limit; // related things $target = $template_default["link_target"] ? ' target="'.$template_default["link_target"].'"' : ''; $result = _dbQuery($sql); if(isset($result[0])) { foreach($result as $row) { if(empty($row['article_redirect'])) { if(empty($row['article_morelink'])) { continue; } $article_link = 'index.php?'.setGetArticleAid($row).'"'.$target; } else { $redirect = get_redirect_link($row['article_redirect'], ' ', ''); $article_link = $redirect['link'].'"'.$redirect['target']; } if($template_default["link_length"] && strlen($row['article_title']) > $template_default["link_length"]) { $article_title = substr($row['article_title'], 0, $template_default["link_length"]).$template_default["cut_title_add"]; } else { $article_title = $row['article_title']; } $keyword_links .= $template_default["link_before"]; $keyword_links .= $template_default["link_symbol"]; $keyword_links .= ' \\ ==== V 1.2 ==== 27.01.11 KH Update: Expanded for the output of the article creation date. To activate this feature, two options are available. * In the script within the range **"CUSTOM VAR"** set up the var **$date_form** with appropriate php-date notation. * In the file **conf_template_default.inc.php** create the var **$template_default['related']['date_format']** and set up with appropriate php-date notation. {{:english:phpwcms_replacer_rts:frontend_render:relatedx_fe_1.gif: }} // CUSTOM VAR ========================== +KH: 27.01.11 // Article date created // Set in conf_template_default.inc.php e.g: $template_default['related']['date_format'] = 'd.m.Y'; // or set up the var $date_form $date_form = 'd.m.Y'; // ''; $date_form_before = ' ['; $date_form_after = ']'; // ===================================== {{:english:phpwcms_replacer_rts:frontend_render:relatedx0_fe_1.gif }} // CUSTOM VAR ========================== +KH: 27.01.11 // Article date created // Set in conf_template_default.inc.php e.g: $template_default['related']['date_format'] = 'd.m.Y'; // or set up the var $date_form $date_form = ''; // 'd.m.Y'; $date_form_before = ' ['; $date_form_after = ']'; // ===================================== \\ Search beginning behind cad-ID=0 = home {RELATEDX:5:tip,top,flip,flop:2} -> Output first 5 entries, search beginning behind cad-ID=2 V 1.1 20.01.11 KH - Update: Last version don´t work right in newer CMS vrsions (since r400). http://code.google.com/p/phpwcms/source/detail?r=400&path=/trunk/include/inc_front/front.func.inc.php 22.01.11 KH : Start category in result V 1.2 27.01.11 KH - Update: Added "article creaded date" -> see CUSTOM VAR *************************************************************************************/ // ---------------------------------------------------------------------------------- // obligate check for phpwcms constants if (!defined('PHPWCMS_ROOT')) {die("You Cannot Access This Script Directly, Have a Nice Day.");} // ---------------------------------------------------------------------------------- // related articles based on keywords, inspired by Magnar Stav Johanssen if(strpos($content["all"],'{RELATEDX:') !== false) { // CUSTOM VAR ========================== +KH: 27.01.11 // Article date created // Set in conf_template_default.inc.php e.g: $template_default['related']['date_format'] = 'd.m.Y'; // or set up in var $date_form $date_form = ''; // 'd.m.Y'; $date_form_before = ' ['; $date_form_after = ']'; // ===================================== $date_form = (!isset($template_default['related']['date_format'])) ? $date_form : $template_default['related']['date_format']; // +KH: 27.01.11 if (!$no_content_for_this_page && !empty($content["articles"][$aktion[1]]["article_keyword"])) { $related_keywords = $content["articles"][$aktion[1]]["article_keyword"]; } else { $related_keywords = ''; } // ------------------------------------------------------------- function buildStruct_TopDown($start=0, &$my_cat_id='') { // KH: V1.1 25.01.2011 $struct = getStructureChildData($start); foreach($struct as $value) { // buildStruct_TopDown($value['acat_id'],$my_cat_id); $my_cat_id .= ($my_cat_id != '') ? ','.$value['acat_id'] : $value['acat_id']; buildStruct_TopDown($value['acat_id'],$my_cat_id); // echo '||'.$value['acat_id'].' ,'; } return $my_cat_id; } // ================================================================= function my_get_related_articles($keywords='', $current_article_id=0, $template_default='', $max_cnt_links=10, $dbcon ,$cat_id='',$date_form, $date_form_before, $date_form_after) { // find keyword for current article used for RELATED replacementtag // prepared and inspired by Magnar Stav Johanssen $temp = buildStruct_TopDown($cat_id); // find all permitted IDs behind $cat_id if (!empty($temp)) $cat_id = $cat_id.','.$temp; // +KH: 20.01.11 add start category // PATCH01 // $cat_id = $temp; // If you don´t need the start cat in result $keyword_links = ""; $max_cnt_links = intval($max_cnt_links); $keywords = str_replace("ALLKEYWORDS", $GLOBALS['content']['all_keywords'].',', $keywords); // replace unwanted chars and convert to wanted $keywords = str_replace(";", ",", $keywords); $keywords = str_replace("'", "", $keywords); $keywords = str_replace(" ", ",", $keywords); $keywords = str_replace(",,", ",", $keywords); // choose comma separated keywords $keywordarray = explode (",", $keywords); $keywordarray = array_map('trim', $keywordarray); $keywordarray = array_diff($keywordarray, array('')); $keywordarray = array_unique($keywordarray); $keywordarray = array_map('strtoupper', $keywordarray); // check for empty keywords or keywords smaller than 3 chars if(is_array($keywordarray) && count($keywordarray)) { foreach($keywordarray as $key => $value) { if(substr($keywordarray[$key], 0, 1) == '-') { $doNotUse = substr($keywordarray[$key], 1); foreach($keywordarray as $key2 => $value2) { if($doNotUse == $value2) { unset($keywordarray[$key2]); unset($keywordarray[$key]); } } } if(isset($keywordarray[$key]) && (strlen($keywordarray[$key]) < 3 || empty($keywordarray[$key]))) { unset($keywordarray[$key]); } } } if(is_array($keywordarray) && count($keywordarray)) { $where = ""; foreach($keywordarray as $value) { //build where keyword = blabla $where .= ($where) ? " OR " : ""; //replace every "'" to "''" for security reasons with aporeplace() $where .= "article_keyword LIKE '%".aporeplace($value)."%'"; } $limit = ($max_cnt_links) ? " LIMIT ".$max_cnt_links : ""; // -KH:200111 // $sql = "SELECT article_id, article_title, article_cid, article_subtitle, article_summary, article_alias "; // +KH:200111 $sql = "SELECT article_id, article_title, article_cid, article_subtitle, article_summary, article_alias, article_redirect, article_morelink, article_created "; $sql .= "FROM ".DB_PREPEND."phpwcms_article WHERE article_deleted=0 AND "; $sql .= "article_id<>".intval($current_article_id)." AND "; $sql .= "article_cid IN (".$cat_id.") AND "; // VISIBLE_MODE: 0 = frontend (all) mode, 1 = article user mode, 2 = admin user mode switch(VISIBLE_MODE) { case 0: $sql .= "article_public=1 AND article_aktiv=1 AND "; break; case 1: $sql .= "article_uid=".$_SESSION["wcs_user_id"]." AND "; break; //case 2: admin mode no additional neccessary } $sql .= "article_begin < NOW() AND article_end > NOW() AND (".$where.") "; if(empty($template_default['sort_by'])) $template_default['sort_by'] = ''; switch($template_default['sort_by']) { case 'title_asc': $sql .= "ORDER BY article_title"; break; case 'title_desc': $sql .= "ORDER BY article_title DESC"; break; case 'ldate_asc': $sql .= "ORDER BY article_begin"; break; case 'ldate_desc': $sql .= "ORDER BY article_begin DESC"; break; case 'kdate_asc': $sql .= "ORDER BY article_end"; break; case 'kdate_desc': $sql .= "ORDER BY article_end DESC"; break; case 'cdate_asc': $sql .= "ORDER BY article_created"; break; case 'cdate_desc': $sql .= "ORDER BY article_created DESC"; break; default: $sql .= "ORDER BY article_tstamp DESC"; } $sql .= $limit; // related things $target = $template_default["link_target"] ? ' target="'.$template_default["link_target"].'"' : ''; $result = _dbQuery($sql); if(isset($result[0])) { foreach($result as $row) { if(empty($row['article_redirect'])) { if(empty($row['article_morelink'])) { continue; } $article_link = 'index.php?'.setGetArticleAid($row).'"'.$target; } else { $redirect = get_redirect_link($row['article_redirect'], ' ', ''); $article_link = $redirect['link'].'"'.$redirect['target']; } if($template_default["link_length"] && strlen($row['article_title']) > $template_default["link_length"]) { $article_title = substr($row['article_title'], 0, $template_default["link_length"]).$template_default["cut_title_add"]; } else { $article_title = $row['article_title']; } $keyword_links .= $template_default["link_before"]; $keyword_links .= $template_default["link_symbol"]; $keyword_links .= ' \\ ==== V 1.21 ==== 25.04.11 KH Update: Selection whether **no article date** or the **article date of creation** or the **article editing date** are spent. To activate this feature, two options are available: * In the script within the range **"CUSTOM VAR"** set up the var **$date_form** with appropriate php-date notation. * In the file **conf_template_default.inc.php** create the var **$template_default['related']['date_format']** and set up with appropriate php-date notation. In addition the output of the date can be suppressed by registered php-date notation with ##$date_output = 0;##. \\ {{:english:phpwcms_replacer_rts:frontend_render:relatedx_fe_1.gif: }} // CUSTOM VAR ========================== +KH: 27.01.11 // Article date created or arcticle date changed (+KH 25.04.2011) // Set in conf_template_default.inc.php e.g: $template_default['related']['date_format'] = 'd.m.Y'; // or set up the var $date_form $date_output = 2; // [0|1|2] No date | date created | date changed // +KH: 25.04.11 $date_form = 'd.m.Y'; // 'Y/m/d'; $date_form_before = ' ['; $date_form_after = ']'; // ===================================== {{:english:phpwcms_replacer_rts:frontend_render:relatedx0_fe_1.gif }} // CUSTOM VAR ========================== +KH: 27.01.11 // Article date created or arcticle date changed (+KH 25.04.2011) // Set in conf_template_default.inc.php e.g: $template_default['related']['date_format'] = 'd.m.Y'; // or set up the var $date_form $date_output = 0; // [0|1|2] No date | date created | date changed // +KH: 25.04.11 $date_form = 'd.m.Y'; // 'Y/m/d'; $date_form_before = ' ['; $date_form_after = ']'; // ===================================== \\ Search beginning behind cad-ID=0 = home {RELATEDX:5:tip,top,flip,flop:2} -> Output first 5 entries, search beginning behind cad-ID=2 V 1.1 20.01.11 KH - Update: Last version don´t work right in newer CMS vrsions (since r400). http://code.google.com/p/phpwcms/source/detail?r=400&path=/trunk/include/inc_front/front.func.inc.php 22.01.11 KH : Start category in result V 1.2 27.01.11 KH - Update: Added "article creaded date" -> see CUSTOM VAR V 1.21 25.04.11 KH - Update: Added "article changed date" -> see CUSTOM VAR Added: Output selection switch for article [date creaded | date changed] *************************************************************************************/ // ---------------------------------------------------------------------------------- // obligate check for phpwcms constants if (!defined('PHPWCMS_ROOT')) {die("You Cannot Access This Script Directly, Have a Nice Day.");} // ---------------------------------------------------------------------------------- // related articles based on keywords, inspired by Magnar Stav Johanssen if(strpos($content["all"],'{RELATEDX:') !== false) { // CUSTOM VAR ========================== +KH: 27.01.11 // Article date created or arcticle date changed (+KH 25.04.2011) // Set in conf_template_default.inc.php e.g: $template_default['related']['date_format'] = 'd.m.Y'; // or set up in var $date_form $date_output = 2; // [0|1|2] No date | date created | date changed // +KH: 25.04.11 $date_form = 'd.m.Y'; // 'd.m.Y'; $date_form_before = ' ['; $date_form_after = ']'; // ===================================== $date_form = (!isset($template_default['related']['date_format'])) ? $date_form : $template_default['related']['date_format']; // +KH: 27.01.11 if (!$no_content_for_this_page && !empty($content["articles"][$aktion[1]]["article_keyword"])) { $related_keywords = $content["articles"][$aktion[1]]["article_keyword"]; } else { $related_keywords = ''; } // ------------------------------------------------------------- function buildStruct_TopDown($start=0, &$my_cat_id='') { // KH: V1.1 25.01.2011 $struct = getStructureChildData($start); foreach($struct as $value) { // buildStruct_TopDown($value['acat_id'],$my_cat_id); $my_cat_id .= ($my_cat_id != '') ? ','.$value['acat_id'] : $value['acat_id']; buildStruct_TopDown($value['acat_id'],$my_cat_id); // echo '||'.$value['acat_id'].' ,'; } return $my_cat_id; } // ================================================================= function my_get_related_articles($keywords='', $current_article_id=0, $template_default='', $max_cnt_links=10, $dbcon ,$cat_id='', $date_output, $date_form, $date_form_before, $date_form_after) { // find keyword for current article used for RELATED replacementtag // prepared and inspired by Magnar Stav Johanssen $temp = buildStruct_TopDown($cat_id); // find all permitted IDs behind $cat_id if (!empty($temp)) $cat_id = $cat_id.','.$temp; // +KH: 20.01.11 add start category // PATCH01 // $cat_id = $temp; // If you don´t need the start cat in result $keyword_links = ""; $max_cnt_links = intval($max_cnt_links); $keywords = str_replace("ALLKEYWORDS", $GLOBALS['content']['all_keywords'].',', $keywords); // replace unwanted chars and convert to wanted $keywords = str_replace(";", ",", $keywords); $keywords = str_replace("'", "", $keywords); $keywords = str_replace(" ", ",", $keywords); $keywords = str_replace(",,", ",", $keywords); // choose comma separated keywords $keywordarray = explode (",", $keywords); $keywordarray = array_map('trim', $keywordarray); $keywordarray = array_diff($keywordarray, array('')); $keywordarray = array_unique($keywordarray); $keywordarray = array_map('strtoupper', $keywordarray); // check for empty keywords or keywords smaller than 3 chars if(is_array($keywordarray) && count($keywordarray)) { foreach($keywordarray as $key => $value) { if(substr($keywordarray[$key], 0, 1) == '-') { $doNotUse = substr($keywordarray[$key], 1); foreach($keywordarray as $key2 => $value2) { if($doNotUse == $value2) { unset($keywordarray[$key2]); unset($keywordarray[$key]); } } } if(isset($keywordarray[$key]) && (strlen($keywordarray[$key]) < 3 || empty($keywordarray[$key]))) { unset($keywordarray[$key]); } } } if(is_array($keywordarray) && count($keywordarray)) { $where = ""; foreach($keywordarray as $value) { //build where keyword = blabla $where .= ($where) ? " OR " : ""; //replace every "'" to "''" for security reasons with aporeplace() $where .= "article_keyword LIKE '%".aporeplace($value)."%'"; } $limit = ($max_cnt_links) ? " LIMIT ".$max_cnt_links : ""; // -KH:200111 // $sql = "SELECT article_id, article_title, article_cid, article_subtitle, article_summary, article_alias "; // +KH:200111 $sql = "SELECT article_id, article_title, article_cid, article_subtitle, article_summary, article_alias, article_redirect, article_morelink, article_created, UNIX_TIMESTAMP(article_tstamp) as article_changed "; $sql .= "FROM ".DB_PREPEND."phpwcms_article WHERE article_deleted=0 AND "; $sql .= "article_id<>".intval($current_article_id)." AND "; $sql .= "article_cid IN (".$cat_id.") AND "; // VISIBLE_MODE: 0 = frontend (all) mode, 1 = article user mode, 2 = admin user mode switch(VISIBLE_MODE) { case 0: $sql .= "article_public=1 AND article_aktiv=1 AND "; break; case 1: $sql .= "article_uid=".$_SESSION["wcs_user_id"]." AND "; break; //case 2: admin mode no additional neccessary } $sql .= "article_begin < NOW() AND article_end > NOW() AND (".$where.") "; if(empty($template_default['sort_by'])) $template_default['sort_by'] = ''; switch($template_default['sort_by']) { case 'title_asc': $sql .= "ORDER BY article_title"; break; case 'title_desc': $sql .= "ORDER BY article_title DESC"; break; case 'ldate_asc': $sql .= "ORDER BY article_begin"; break; case 'ldate_desc': $sql .= "ORDER BY article_begin DESC"; break; case 'kdate_asc': $sql .= "ORDER BY article_end"; break; case 'kdate_desc': $sql .= "ORDER BY article_end DESC"; break; case 'cdate_asc': $sql .= "ORDER BY article_created"; break; case 'cdate_desc': $sql .= "ORDER BY article_created DESC"; break; default: $sql .= "ORDER BY article_tstamp DESC"; } $sql .= $limit; // related things $target = $template_default["link_target"] ? ' target="'.$template_default["link_target"].'"' : ''; $result = _dbQuery($sql); if(isset($result[0])) { foreach($result as $row) { if(empty($row['article_redirect'])) { if(empty($row['article_morelink'])) { continue; } $article_link = 'index.php?'.setGetArticleAid($row).'"'.$target; } else { $redirect = get_redirect_link($row['article_redirect'], ' ', ''); $article_link = $redirect['link'].'"'.$redirect['target']; } if($template_default["link_length"] && strlen($row['article_title']) > $template_default["link_length"]) { $article_title = substr($row['article_title'], 0, $template_default["link_length"]).$template_default["cut_title_add"]; } else { $article_title = $row['article_title']; } $keyword_links .= $template_default["link_before"]; $keyword_links .= $template_default["link_symbol"]; $keyword_links .= ' \\ ==== V 1.3 ==== 27.04.11 KH Update: Choice whether Article Keywords will be searched in hidden categories or not. $show_hidden = 1; // Suche [0] = nicht in versteckten Kategorien [1] = in allen Kategorien \\ **03.05.11 KH Update:** Error correction in the function call "buildStruct_TopDown" \\ // CUSTOM VAR ========================== +KH: 27.01.11 // Article date created or arcticle date changed (+KH 25.04.2011) // Set in conf_template_default.inc.php e.g: $template_default['related']['date_format'] = 'd.m.Y'; // or set up the var $date_form $date_output = 2; // [0|1|2] No date | date created | date changed // +KH: 25.04.11 $date_form = 'd.m.Y'; // ''; $date_form_before = ' ['; $date_form_after = ']'; $show_hidden = 1; // search in [0] = no hidden categories [1] = all categories // ===================================== \\ Search beginning behind cad-ID=0 = home {RELATEDX:5:tip,top,flip,flop:2} -> Output first 5 entries, search beginning behind cad-ID=2 V 1.1 20.01.11 KH - Update: Last version don´t work right in newer CMS vrsions (since r400). http://code.google.com/p/phpwcms/source/detail?r=400&path=/trunk/include/inc_front/front.func.inc.php 22.01.11 KH : Start category in result V 1.2 27.01.11 KH - Update: Added "article creaded date" -> see CUSTOM VAR V 1.21 25.04.11 KH - Update: Added "article changed date" -> see CUSTOM VAR Added: Output selection switch for article [date creaded | date changed] V 1.3 27.04.11 KH - Update: Added "show article in hidden categories" -> see CUSTOM VAR Added: Output selection switch for article in [no hidden categories | all categories] 03.05.11 KH - Update: Error correction in the function call "buildStruct_TopDown" *************************************************************************************/ // ---------------------------------------------------------------------------------- // obligate check for phpwcms constants if (!defined('PHPWCMS_ROOT')) {die("You Cannot Access This Script Directly, Have a Nice Day.");} // ---------------------------------------------------------------------------------- // related articles based on keywords, inspired by Magnar Stav Johanssen if(strpos($content["all"],'{RELATEDX:') !== false) { // CUSTOM VAR ========================== +KH: 27.01.11 // Article date created or arcticle date changed (+KH 25.04.2011) // Set in conf_template_default.inc.php e.g: $template_default['related']['date_format'] = 'd.m.Y'; // or set up in var $date_form $date_output = 2; // [0|1|2] No date | date created | date changed // +KH: 25.04.11 $date_form = 'd.m.Y'; // ''; $date_form_before = ' ['; $date_form_after = ']'; $show_hidden = 1; // search in [0] = no hidden categories [1] = all categories // ===================================== $date_form = (!isset($template_default['related']['date_format'])) ? $date_form : $template_default['related']['date_format']; // +KH: 27.01.11 if (!$no_content_for_this_page && !empty($content["articles"][$aktion[1]]["article_keyword"])) { $related_keywords = $content["articles"][$aktion[1]]["article_keyword"]; } else { $related_keywords = ''; } // ------------------------------------------------------------- // Function imported from /include/inc_front/front.func.inc.php -> line 3305 // Added KH 27.04.2011: Var $show_hidden function my_getStructureLevelDisplayStatus(&$level_ID, &$current_ID, $show_hidden=1) { if($GLOBALS['content']['struct'][$level_ID]['acat_struct'] == $current_ID && $level_ID) { if($GLOBALS['content']['struct'][$level_ID]['acat_regonly'] && !FEUSER_LOGIN_STATUS) { return false; } // Added KH 27.04.2011: OR xxxx = Show_hidden if(empty($GLOBALS['content']['struct'][$level_ID]['acat_hidden']) OR $GLOBALS['content']['struct'][$level_ID]['acat_hidden']==$show_hidden) { return true; } elseif($GLOBALS['content']['struct'][$level_ID]["acat_hidden"] == 2 && isset($GLOBALS['LEVEL_KEY'][$level_ID])) { return true; } return false; } return false; } function buildStruct_TopDown($start=0, &$my_cat_id='',$show_hidden=1) { // KH: V1.1 25.01.2011 // Original from: function my_getStructureChildData($level_id=0) +KH 27.04.2011 $struct_data = array(); if( isset($GLOBALS['content']['struct'][$start]) ) { foreach($GLOBALS['content']['struct'] as $key => $value) { if( my_getStructureLevelDisplayStatus($key, $start,$show_hidden) ) { $struct_data[$key] = $value; } } } $struct = $struct_data; foreach($struct as $value) { $my_cat_id .= ($my_cat_id != '') ? ','.$value['acat_id'] : $value['acat_id']; buildStruct_TopDown($value['acat_id'],$my_cat_id,$show_hidden); // echo '||'.$value['acat_id'].' ,'; } return $my_cat_id; } // ================================================================= function my_get_related_articles($keywords='', $current_article_id=0, $template_default='', $max_cnt_links=10, $dbcon ,$cat_id='', $date_output, $date_form, $date_form_before, $date_form_after,$show_hidden) { // find keyword for current article used for RELATED replacementtag // prepared and inspired by Magnar Stav Johanssen $dummy = ''; $temp = buildStruct_TopDown($cat_id,$dummy,$show_hidden); // find all permitted IDs behind $cat_id if (!empty($temp)) $cat_id = $cat_id.','.$temp; // +KH: 20.01.11 add start category // PATCH01 // $cat_id = $temp; // If you don´t need the start cat in result $keyword_links = ""; $max_cnt_links = intval($max_cnt_links); $keywords = str_replace("ALLKEYWORDS", $GLOBALS['content']['all_keywords'].',', $keywords); // replace unwanted chars and convert to wanted $keywords = str_replace(";", ",", $keywords); $keywords = str_replace("'", "", $keywords); $keywords = str_replace(" ", ",", $keywords); $keywords = str_replace(",,", ",", $keywords); // choose comma separated keywords $keywordarray = explode (",", $keywords); $keywordarray = array_map('trim', $keywordarray); $keywordarray = array_diff($keywordarray, array('')); $keywordarray = array_unique($keywordarray); $keywordarray = array_map('strtoupper', $keywordarray); // check for empty keywords or keywords smaller than 3 chars if(is_array($keywordarray) && count($keywordarray)) { foreach($keywordarray as $key => $value) { if(substr($keywordarray[$key], 0, 1) == '-') { $doNotUse = substr($keywordarray[$key], 1); foreach($keywordarray as $key2 => $value2) { if($doNotUse == $value2) { unset($keywordarray[$key2]); unset($keywordarray[$key]); } } } if(isset($keywordarray[$key]) && (strlen($keywordarray[$key]) < 3 || empty($keywordarray[$key]))) { unset($keywordarray[$key]); } } } if(is_array($keywordarray) && count($keywordarray)) { $where = ""; foreach($keywordarray as $value) { //build where keyword = blabla $where .= ($where) ? " OR " : ""; //replace every "'" to "''" for security reasons with aporeplace() $where .= "article_keyword LIKE '%".aporeplace($value)."%'"; } $limit = ($max_cnt_links) ? " LIMIT ".$max_cnt_links : ""; // -KH:200111 // $sql = "SELECT article_id, article_title, article_cid, article_subtitle, article_summary, article_alias "; // +KH:200111 $sql = "SELECT article_id, article_title, article_cid, article_subtitle, article_summary, article_alias, article_redirect, article_morelink, article_created, UNIX_TIMESTAMP(article_tstamp) AS article_changed "; $sql .= "FROM ".DB_PREPEND."phpwcms_article WHERE article_deleted=0 AND "; $sql .= "article_id<>".intval($current_article_id)." AND "; $sql .= "article_cid IN (".$cat_id.") AND "; // VISIBLE_MODE: 0 = frontend (all) mode, 1 = article user mode, 2 = admin user mode switch(VISIBLE_MODE) { case 0: $sql .= "article_public=1 AND article_aktiv=1 AND "; break; case 1: $sql .= "article_uid=".$_SESSION["wcs_user_id"]." AND "; break; //case 2: admin mode no additional neccessary } $sql .= "article_begin < NOW() AND article_end > NOW() AND (".$where.") "; if(empty($template_default['sort_by'])) $template_default['sort_by'] = ''; switch($template_default['sort_by']) { case 'title_asc': $sql .= "ORDER BY article_title"; break; case 'title_desc': $sql .= "ORDER BY article_title DESC"; break; case 'ldate_asc': $sql .= "ORDER BY article_begin"; break; case 'ldate_desc': $sql .= "ORDER BY article_begin DESC"; break; case 'kdate_asc': $sql .= "ORDER BY article_end"; break; case 'kdate_desc': $sql .= "ORDER BY article_end DESC"; break; case 'cdate_asc': $sql .= "ORDER BY article_created"; break; case 'cdate_desc': $sql .= "ORDER BY article_created DESC"; break; default: $sql .= "ORDER BY article_tstamp DESC"; } $sql .= $limit; // related things $target = $template_default["link_target"] ? ' target="'.$template_default["link_target"].'"' : ''; $result = _dbQuery($sql); if(isset($result[0])) { foreach($result as $row) { // echo 'Article ==========='; if(empty($row['article_redirect'])) { if(empty($row['article_morelink'])) { continue; } $article_link = 'index.php?'.setGetArticleAid($row).'"'.$target; } else { $redirect = get_redirect_link($row['article_redirect'], ' ', ''); $article_link = $redirect['link'].'"'.$redirect['target']; } if($template_default["link_length"] && strlen($row['article_title']) > $template_default["link_length"]) { $article_title = substr($row['article_title'], 0, $template_default["link_length"]).$template_default["cut_title_add"]; } else { $article_title = $row['article_title']; } $keyword_links .= $template_default["link_before"]; $keyword_links .= $template_default["link_symbol"]; $keyword_links .= ' \\ \\ ==== V 1.31 ==== **27.09.12 KH Update:** Sorts the articles in the category for manual order. In the file ##config\phpwcms\conf.template_default.inc.php## in section **%%// related articles based on keywords%%** please set $template_default['related']['sort_by'] = 'sort_asc|sort_desc'; \\ Search beginning behind cad-ID=0 = home {RELATEDX:5:tip,top,flip,flop:2} -> Output first 5 entries, search beginning behind cad-ID=2 V 1.1 20.01.11 KH - Update: Last version don´t work right in newer CMS vrsions (since r400). http://code.google.com/p/phpwcms/source/detail?r=400&path=/trunk/include/inc_front/front.func.inc.php 22.01.11 KH : Start category in result V 1.2 27.01.11 KH - Update: Added "article creaded date" -> see CUSTOM VAR V 1.21 25.04.11 KH - Update: Added "article changed date" -> see CUSTOM VAR Added: Output selection switch for article [date creaded | date changed] V 1.3 27.04.11 KH - Update: Added "show article in hidden categories" -> see CUSTOM VAR Added: Output selection switch for article in [no hidden categories | all categories] 03.05.11 KH - Update: Error correction in the function call "buildStruct_TopDown" V 1.31 27.09.12 KH - Update: Added: Sorts the articles in the category for manual order. *************************************************************************************/ // ---------------------------------------------------------------------------------- // obligate check for phpwcms constants if (!defined('PHPWCMS_ROOT')) {die("You Cannot Access This Script Directly, Have a Nice Day.");} // ---------------------------------------------------------------------------------- // related articles based on keywords, inspired by Magnar Stav Johanssen if(strpos($content["all"],'{RELATEDX:') !== false) { // CUSTOM VAR ========================== +KH: 27.01.11 // Article date created or arcticle date changed (+KH 25.04.2011) // Set in conf_template_default.inc.php e.g: $template_default['related']['date_format'] = 'd.m.Y'; // or set up in var $date_form $date_output = 2; // [0|1|2] No date | date created | date changed // +KH: 25.04.11 $date_form = 'd.m.Y'; // ''; $date_form_before = ' ['; $date_form_after = ']'; $show_hidden = 1; // search in [0] = no hidden categories [1] = all categories // ===================================== $date_form = (!isset($template_default['related']['date_format'])) ? $date_form : $template_default['related']['date_format']; // +KH: 27.01.11 if (!$no_content_for_this_page && !empty($content["articles"][$aktion[1]]["article_keyword"])) { $related_keywords = $content["articles"][$aktion[1]]["article_keyword"]; } else { $related_keywords = ''; } // ------------------------------------------------------------- // Function imported from /include/inc_front/front.func.inc.php -> line 3305 // Added KH 27.04.2011: Var $show_hidden function my1_getStructureLevelDisplayStatus(&$level_ID, &$current_ID, $show_hidden=1) { if($GLOBALS['content']['struct'][$level_ID]['acat_struct'] == $current_ID && $level_ID) { if($GLOBALS['content']['struct'][$level_ID]['acat_regonly'] && !FEUSER_LOGIN_STATUS) { return false; } // Added KH 27.04.2011: OR xxxx = Show_hidden if(empty($GLOBALS['content']['struct'][$level_ID]['acat_hidden']) OR $GLOBALS['content']['struct'][$level_ID]['acat_hidden']==$show_hidden) { return true; } elseif($GLOBALS['content']['struct'][$level_ID]["acat_hidden"] == 2 && isset($GLOBALS['LEVEL_KEY'][$level_ID])) { return true; } return false; } return false; } function buildStruct_TopDown($start=0, &$my_cat_id='',$show_hidden=1) { // KH: V1.1 25.01.2011 // Original from: function my_getStructureChildData($level_id=0) +KH 27.04.2011 $struct_data = array(); if( isset($GLOBALS['content']['struct'][$start]) ) { foreach($GLOBALS['content']['struct'] as $key => $value) { if( my1_getStructureLevelDisplayStatus($key, $start,$show_hidden) ) { $struct_data[$key] = $value; } } } $struct = $struct_data; foreach($struct as $value) { $my_cat_id .= ($my_cat_id != '') ? ','.$value['acat_id'] : $value['acat_id']; buildStruct_TopDown($value['acat_id'],$my_cat_id,$show_hidden); // echo '||'.$value['acat_id'].' ,'; } return $my_cat_id; } // ================================================================= function my_get_related_articles($keywords='', $current_article_id=0, $template_default='', $max_cnt_links=10, $dbcon ,$cat_id='', $date_output, $date_form, $date_form_before, $date_form_after,$show_hidden) { // find keyword for current article used for RELATED replacementtag // prepared and inspired by Magnar Stav Johanssen $dummy = ''; $temp = buildStruct_TopDown($cat_id,$dummy,$show_hidden); // find all permitted IDs behind $cat_id if (!empty($temp)) $cat_id = $cat_id.','.$temp; // +KH: 20.01.11 add start category // PATCH01 // $cat_id = $temp; // If you don´t need the start cat in result $keyword_links = ""; $max_cnt_links = intval($max_cnt_links); $keywords = str_replace("ALLKEYWORDS", $GLOBALS['content']['all_keywords'].',', $keywords); // replace unwanted chars and convert to wanted $keywords = str_replace(";", ",", $keywords); $keywords = str_replace("'", "", $keywords); $keywords = str_replace(" ", ",", $keywords); $keywords = str_replace(",,", ",", $keywords); // choose comma separated keywords $keywordarray = explode (",", $keywords); $keywordarray = array_map('trim', $keywordarray); $keywordarray = array_diff($keywordarray, array('')); $keywordarray = array_unique($keywordarray); $keywordarray = array_map('strtoupper', $keywordarray); // check for empty keywords or keywords smaller than 3 chars if(is_array($keywordarray) && count($keywordarray)) { foreach($keywordarray as $key => $value) { if(substr($keywordarray[$key], 0, 1) == '-') { $doNotUse = substr($keywordarray[$key], 1); foreach($keywordarray as $key2 => $value2) { if($doNotUse == $value2) { unset($keywordarray[$key2]); unset($keywordarray[$key]); } } } if(isset($keywordarray[$key]) && (strlen($keywordarray[$key]) < 3 || empty($keywordarray[$key]))) { unset($keywordarray[$key]); } } } if(is_array($keywordarray) && count($keywordarray)) { $where = ""; foreach($keywordarray as $value) { //build where keyword = blabla $where .= ($where) ? " OR " : ""; //replace every "'" to "''" for security reasons with aporeplace() $where .= "article_keyword LIKE '%".aporeplace($value)."%'"; } $limit = ($max_cnt_links) ? " LIMIT ".$max_cnt_links : ""; // -KH:200111 // $sql = "SELECT article_id, article_title, article_cid, article_subtitle, article_summary, article_alias "; // +KH:200111 $sql = "SELECT article_id, article_title, article_cid, article_subtitle, article_summary, article_alias, article_redirect, article_morelink, article_created, UNIX_TIMESTAMP(article_tstamp) AS article_changed "; $sql .= "FROM ".DB_PREPEND."phpwcms_article WHERE article_deleted=0 AND "; $sql .= "article_id<>".intval($current_article_id)." AND "; $sql .= "article_cid IN (".$cat_id.") AND "; // VISIBLE_MODE: 0 = frontend (all) mode, 1 = article user mode, 2 = admin user mode switch(VISIBLE_MODE) { case 0: $sql .= "article_public=1 AND article_aktiv=1 AND "; break; case 1: $sql .= "article_uid=".$_SESSION["wcs_user_id"]." AND "; break; //case 2: admin mode no additional neccessary } $sql .= "article_begin < NOW() AND article_end > NOW() AND (".$where.") "; if(empty($template_default['sort_by'])) $template_default['sort_by'] = ''; switch($template_default['sort_by']) { // +KH:27.09.12 Sorts the articles in the category for manual order. case 'sort_asc': $sql .= "ORDER BY article_cid, article_sort"; break; case 'sort_desc': $sql .= "ORDER BY article_cid, article_sort DESC"; break; // ---------- case 'title_asc': $sql .= "ORDER BY article_title"; break; case 'title_desc': $sql .= "ORDER BY article_title DESC"; break; case 'ldate_asc': $sql .= "ORDER BY article_begin"; break; case 'ldate_desc': $sql .= "ORDER BY article_begin DESC"; break; case 'kdate_asc': $sql .= "ORDER BY article_end"; break; case 'kdate_desc': $sql .= "ORDER BY article_end DESC"; break; case 'cdate_asc': $sql .= "ORDER BY article_created"; break; case 'cdate_desc': $sql .= "ORDER BY article_created DESC"; break; default: $sql .= "ORDER BY article_tstamp DESC"; } $sql .= $limit; // related things $target = $template_default["link_target"] ? ' target="'.$template_default["link_target"].'"' : ''; $result = _dbQuery($sql); if(isset($result[0])) { foreach($result as $row) { // echo 'Article ==========='; if(empty($row['article_redirect'])) { if(empty($row['article_morelink'])) { continue; } $article_link = 'index.php?'.setGetArticleAid($row).'"'.$target; } else { $redirect = get_redirect_link($row['article_redirect'], ' ', ''); $article_link = $redirect['link'].'"'.$redirect['target']; } if($template_default["link_length"] && strlen($row['article_title']) > $template_default["link_length"]) { $article_title = substr($row['article_title'], 0, $template_default["link_length"]).$template_default["cut_title_add"]; } else { $article_title = $row['article_title']; } $keyword_links .= $template_default["link_before"]; $keyword_links .= $template_default["link_symbol"]; $keyword_links .= ' \\ \\ ==== NEW ( 2014) ==== use keywords (tags) in the articles (as needed for the old {RELATED}, then use the teaser CP with the tags should be used to filter "related" contents.