g1annis Δημοσ. 5 Νοεμβρίου 2008 Δημοσ. 5 Νοεμβρίου 2008 Γεια σας. Έστησα και διαχειρίζομαι ένα Joomla site. Αρχικά ημηχανή αναζήτησης (η προεγκατεστημένη) με ικανοποιούσε. Αλλά πλέον είναι ανεπαρκής καθώς έχει αυξηθεί σημαντικά ο αρθμός των άρθρων που έχω στο site. Για παράδειγμα, ψάχνω για "θήκη" και μου εμφανίζει όλα άρθρα που περιέχουν λέξεις, που περιέχουν ως μέρος τους το τμήμα "θήκη". Πχ διαθήκη, παρακαταθήκη, υποθήκη κλπ. Αυτό που θέλω είναι 1) Για το πρώτο θέμα που με απασχολεί δύο εφικτές λύσεις βλέπω: η μία είναι να εμφανίζεται κάτω από το πεδίο αναζήτησης η επιλογή "ψάξε τίτλους μόνο" ώστε να ψάχνει μόνο στους τίτλους των άρθρων. (όπως πχ τώρα έχει 3 επιλογές "ακριβής φράση", "οποιαδήποτε λέξη", "όλες οι λέξεις", να εμφανίζεται επιλογή "ψάξε τίτλους μόνο") η δεύτερη λύση είναι στα αποτελέσαμτα αναζήτησης, να εμφανίζει πρώτα τα άρθρα που η αναζητούμενη λέξη ταιριάζει στον τίτλο τους, και μετά όλα τα υπόλοιπα. 2) Κατά τη γνώμη σας, είναι πιο εύκολο να τροποποιήσω τον κώδικα του ήδη υπάρχοντος component ή να εγκαταστήσω κάποιο άλλο? (παρακάτω παραθέτω τον κώδικα) Αν συνιστάτε να εγκαταστήσω κάποιο άλλο component αναζήτησης, έχετε να προτείνεται κάποιο που να κάνει τη δουλειά που ζητάω? Ευχαριστώ. ><?php /** * @version $Id: search.php 10002 2008-02-08 10:56:57Z willebil $ * @package Joomla * @subpackage Search * @copyright Copyright (C) 2005 Open Source Matters. All rights reserved. * @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php * Joomla! is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. * See COPYRIGHT.php for copyright notices and details. */ // no direct access defined( '_VALID_MOS' ) or die( 'Restricted access' ); require_once( $mainframe->getPath( 'front_html' ) ); // page title $mainframe->setPageTitle( _SEARCH_TITLE ); switch ( $task ) { default: viewSearch(); break; } function viewSearch() { global $mainframe, $mosConfig_absolute_path, $mosConfig_lang, $my; global $Itemid, $database, $_MAMBOTS; global $mosConfig_list_limit; $restriction = 0; // try to find search component's Itemid // Only search if we don't have a valid Itemid (e.g. from module) if(!intval($Itemid) || intval($Itemid) == 99999999) { $query = "SELECT id" . "\n FROM #__menu" . "\n WHERE type = 'components'" . "\n AND published = 1" . "\n AND link = 'index.php?option=com_search'" ; $database->setQuery( $query ); $_Itemid = $database->loadResult(); if ($_Itemid != "") { $Itemid = $_Itemid; } } $gid = $my->gid; // Adds parameter handling if( $Itemid > 0 && $Itemid != 99999999 ) { $menu = $mainframe->get( 'menu' ); $params = new mosParameters( $menu->params ); $params->def( 'page_title', 1 ); $params->def( 'pageclass_sfx', '' ); $params->def( 'header', $menu->name ); $params->def( 'back_button', $mainframe->getCfg( 'back_button' ) ); } else { $params = new mosParameters(''); $params->def( 'page_title', 1 ); $params->def( 'pageclass_sfx', '' ); $params->def( 'header', _SEARCH_TITLE ); $params->def( 'back_button', $mainframe->getCfg( 'back_button' ) ); } // html output search_html::openhtml( $params ); $searchphrase = mosGetParam( $_REQUEST, 'searchphrase', 'any' ); $searchphrase = preg_replace( '/[^a-z]/', '', strtolower( $searchphrase ) ); $searchword = strval( mosGetParam( $_REQUEST, 'searchword', '' ) ); $searchword = trim( stripslashes( $searchword ) ); // limit searchword to 40 characters if ( strlen( $searchword ) > 40 ) { $searchword = substr( $searchword, 0, 39 ); $restriction = 1; } // searchword must contain a minimum of 3 characters if ( $searchword && strlen( $searchword ) < 3 ) { $searchword = ''; $restriction = 1; } if ($searchphrase != 'exact') { $aterms = explode( ' ', strtolower( $searchword ) ); $search_ignore = array(); // filter out search terms that are too small foreach( $aterms AS $aterm ) { if (strlen( $aterm ) < 3) { $search_ignore[] = $aterm; } } $pruned = array_diff( $aterms, $search_ignore ); $pruned = array_unique( $pruned ); $searchword = implode( ' ', $pruned ); if (trim( $searchword ) == '') { $restriction = 1; } } @include "$mosConfig_absolute_path/language/$mosConfig_lang.ignore.php"; $orders = array(); $orders[] = mosHTML::makeOption( 'newest', _SEARCH_NEWEST ); $orders[] = mosHTML::makeOption( 'oldest', _SEARCH_OLDEST ); $orders[] = mosHTML::makeOption( 'popular', _SEARCH_POPULAR ); $orders[] = mosHTML::makeOption( 'alpha', _SEARCH_ALPHABETICAL ); $orders[] = mosHTML::makeOption( 'category', _SEARCH_CATEGORY ); $ordering = mosGetParam( $_REQUEST, 'ordering', 'newest'); $ordering = preg_replace( '/[^a-z]/', '', strtolower( $ordering ) ); $lists = array(); $lists['ordering'] = mosHTML::selectList( $orders, 'ordering', 'id="search_ordering" class="inputbox"', 'value', 'text', $ordering ); $searchphrases = array(); $phrase = new stdClass(); $phrase->value = 'any'; $phrase->text = _SEARCH_ANYWORDS; $searchphrases[] = $phrase; $phrase = new stdClass(); $phrase->value = 'all'; $phrase->text = _SEARCH_ALLWORDS; $searchphrases[] = $phrase; $phrase = new stdClass(); $phrase->value = 'exact'; $phrase->text = _SEARCH_PHRASE; $searchphrases[] = $phrase; $lists['searchphrase']= mosHTML::radioList( $searchphrases, 'searchphrase', '', $searchphrase ); // html output search_html::searchbox( htmlspecialchars( $searchword ), $lists, $params ); if (!$searchword) { if ( count( $_POST ) ) { // html output // no matches found search_html::message( _NOKEYWORD, $params ); } else if ( $restriction ) { // html output search_html::message( _SEARCH_MESSAGE, $params ); } } else if ( in_array( $searchword, $search_ignore ) ) { // html output search_html::message( _IGNOREKEYWORD, $params ); } else { // html output if ( $restriction ) { // html output search_html::message( _SEARCH_MESSAGE, $params ); } $searchword_clean = htmlspecialchars( $searchword ); search_html::searchintro( $searchword_clean, $params ); mosLogSearch( $searchword ); $_MAMBOTS->loadBotGroup( 'search' ); $results = $_MAMBOTS->trigger( 'onSearch', array( $database->getEscaped( $searchword, true ), $searchphrase, $ordering ) ); $totalRows = 0; $rows = array(); for ($i = 0, $n = count( $results); $i < $n; $i++) { $rows = array_merge( (array)$rows, (array)$results[$i] ); } $totalRows = count( $rows ); for ($i=0; $i < $totalRows; $i++) { $text = &$rows[$i]->text; if ($searchphrase == 'exact') { $searchwords = array($searchword); $needle = $searchword; } else { $searchwords = explode(' ', $searchword); $needle = $searchwords[0]; } $text = mosPrepareSearchContent( $text, 200, $needle ); foreach ($searchwords as $k=>$hlword) { $searchwords[$k] = htmlspecialchars( stripslashes( $hlword ) ); } $searchRegex = implode( '|', $searchwords ); $text = eregi_replace( '('.$searchRegex.')', '<span class="highlight">\0</span>', $text ); if ( strpos( $rows[$i]->href, 'http' ) == false ) { $url = parse_url( $rows[$i]->href ); parse_str( @$url['query'], $link ); // determines Itemid for Content items where itemid has not been included if ( isset($rows[$i]->type) && @$link['task'] == 'view' && isset($link['id']) && !isset($link['Itemid']) ) { $itemid = ''; $_itemid = $mainframe->getItemid( $link['id'], 0 ); if ($_itemid) { $itemid = '&Itemid='. $_itemid; } $rows[$i]->href = $rows[$i]->href . $itemid; } } } $mainframe->setPageTitle( _SEARCH_TITLE ); $total = $totalRows; $limit = intval( mosGetParam( $_GET, 'limit', $mosConfig_list_limit ) ); $limit = ( $limit ? $limit : $mosConfig_list_limit ); $limitstart = intval( mosGetParam( $_GET, 'limitstart', 0 ) ); // prepares searchword for proper display in url $searchword_clean = urlencode( $searchword_clean ); if ( $n ) { // html output require_once( $GLOBALS['mosConfig_absolute_path'] . '/includes/pageNavigation.php' ); $pageNav = new mosPageNav( $total, $limitstart, $limit ); search_html::display( $rows, $params, $pageNav, $limitstart, $limit, $total, $totalRows, $searchword_clean ); } else { // html output search_html::displaynoresult(); } // html output search_html::conclusion( $searchword_clean, $pageNav ); } // displays back button echo '<br/>'; mosHTML::BackButton ( $params, 0 ); } function mosLogSearch( $search_term ) { global $database; global $mosConfig_enable_log_searches; if ( @$mosConfig_enable_log_searches ) { $query = "SELECT hits" . "\n FROM #__core_log_searches" . "\n WHERE LOWER( search_term ) = " . $database->Quote( $search_term ) ; $database->setQuery( $query ); $hits = intval( $database->loadResult() ); if ( $hits ) { $query = "UPDATE #__core_log_searches" . "\n SET hits = ( hits + 1 )" . "\n WHERE LOWER( search_term ) = " . $database->Quote( $search_term ) ; $database->setQuery( $query ); $database->query(); } else { $query = "INSERT INTO #__core_log_searches VALUES ( " . $database->Quote( $search_term ) . ", 1 )" ; $database->setQuery( $query ); $database->query(); } } } ?>
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.