+ Antworten
Ergebnis 1 bis 4 von 4

Thema: Smartsearch/Suchindex alphabetische Reihenfolge der Suchergebnisse

  1. #1
    War schon öfter hier
    Registriert seit
    23.11.2005
    Ort
    Die schönste Stadt der Welt
    Beiträge
    209
    Bedankte sich
    38
    Erhielt 37 Danksagungen
    in 26 Beiträgen

    Frage Smartsearch/Suchindex alphabetische Reihenfolge der Suchergebnisse

    Hallo liebe Joomlaprofis,

    Ich verwende auf meiner Seite die Suchindexierung. Bei der Ausgabe der Ergebnisse wird jedoch die Reihenfolge offensichtlich nach Datum der Beiträge oder etwas ähnlichem geordnet.
    Ich hätte lieber eine alphabetische Reihenfolge der Suchergebnisse. Kann ich da etwas mit einem Template-Override drehen? Welche Datei ist denn für die Ausgabe des Suchindex verantwortlich?

    Vielen Dank,
    Geändert von Vipolda (19.11.2013 um 21:21 Uhr)

  2. #2
    War schon öfter hier
    Registriert seit
    23.11.2005
    Ort
    Die schönste Stadt der Welt
    Beiträge
    209
    Bedankte sich
    38
    Erhielt 37 Danksagungen
    in 26 Beiträgen

    Standard

    Also, nach wirklich langem Suchen habe ich eine Lösung gefunden.
    Ist etwas schmutzig, aber ich weiß nicht wie ich es anders machen kann. Bestimmt verdrehen die Profis hier die Augen, aber ich möchte nur dokumentieren, was ich verändert habe, falls jemand das gleiche Problem hat wie ich.
    Zuerst einmal:
    Das Template-Override stammt aus folgender Quelle
    JOOMLA-ROOT/components/com_finder/views/search/tmpl/default_results.php

    Es wird in das eigene Template-Verzeichnis kopiert unter
    JOOMLA-ROOT/templates/Eigenes_Template/html/com_finder/search/default_results.php

    In dieser Datei habe ich (wie gesagt auf schmutzigen Umwegen) ein Java-Script zum Sortieren von Tabellenspalten implentiert (gibts in verschiedenen Versionen und unter verschiedenen Quellen gratis) und dann eine einspaltige Tabelle um die Ergebnisausgabe des Suchindexes gebastelt.
    Die Datei sieht jetzt so aus:
    PHP-Code:
    <script type="text/javascript" src="templates/javascript/ltrim.js"></script>
    <script type="text/javascript" src="templates/javascript/sort_table.js"></script>
    <script type="text/javascript" >
    window.onload = function() {
        SortTable.init();
    }
    </script>


    <?php
    /**
     * @package     Joomla.Site
     * @subpackage  com_finder
     *
     * @copyright   Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
     * @license     GNU General Public License version 2 or later; see LICENSE
     */

    defined('_JEXEC') or die;



    // Activate the highlighter if enabled.
    if (!empty($this->query->highlight) && $this->params->get('highlight_terms'1)) {
        
    JHtml::_('behavior.highlighter'$this->query->highlight);
    }

    // Get the application object.
    $app JFactory::getApplication();



    // Display the suggested search if it is different from the current search.
    if (($this->suggested && $this->params->get('show_suggested_query'1)) || ($this->explained && $this->params->get('show_explained_query'1))):
    ?>
            <div id="search-query-explained">
            <?php
            
    // Display the suggested search query.
            
    if ($this->suggested && $this->params->get('show_suggested_query'1))
            {
                
    // Replace the base query string with the suggested query string.
                
    $uri JUri::getInstance($this->query->toURI());
                
    $uri->setVar('q'$this->suggested);

                
    // Compile the suggested query link.
                
    $link    '<a href="' JRoute::_($uri->toString(array('path''query'))) . '">'
                        
    $this->escape($this->suggested)
                        . 
    '</a>';

                echo 
    JText::sprintf('COM_FINDER_SEARCH_SIMILAR'$link);
            }
            
    // Display the explained search query.
            
    elseif ($this->explained && $this->params->get('show_explained_query'1)) {
                echo 
    $this->explained;
            }
            
    ?>
    </div>
    <?php
    endif;
    if (
    $this->total == 0):
    ?>
        <div id="search-result-empty">
            <h2><?php echo JText::_('COM_FINDER_SEARCH_NO_RESULTS_HEADING'); ?></h2>
            <?php if ($app->getLanguageFilter()) : ?>
            <p><?php echo JText::sprintf('COM_FINDER_SEARCH_NO_RESULTS_BODY_MULTILANG'$this->escape($this->query->input)); ?></p>
            <?php else : ?>
            <p><?php echo JText::sprintf('COM_FINDER_SEARCH_NO_RESULTS_BODY'$this->escape($this->query->input)); ?></p>
            <?php endif; ?>
        </div>
    <?php
    else:
        
    // Prepare the pagination string.  Results X - Y of Z
        
    $start    = (int) $this->pagination->get('limitstart')+1;
        
    $total    = (int) $this->pagination->get('total');
        
    $limit    = (int) $this->pagination->get('limit') * $this->pagination->get('pages.current');
        
    $limit    = (int) ($limit $total $total $limit);
        
    $pages    JText::sprintf('COM_FINDER_SEARCH_RESULTS_OF'$start$limit$total);
    ?>
        <br id="highlighter-start" />
        <table class="sortable">
            <thead>
                <tr>
                    <th class="list-title" id="tableOrdering">A-Z</th></tr></thead><tbody>
        <dl class="search-results<?php echo $this->pageclass_sfx?>">
            <?php
            
    for ($i 0$n count($this->results); $i $n$i++):
                
    $this->result    = &$this->results[$i];
                
    $layout            $this->getLayoutFile($this->result->layout);
            
    ?>
            <?php echo "<tr><td>";
            echo 
    $this->loadTemplate($layout); 
            echo 
    "</td></tr>"?>
            <?php
            
    endfor;
            
    ?>
        </dl>
        </tbody></table>
        <br id="highlighter-end" />

        <div class="search-pagination">
            <div class="pagination">
                <?php echo $this->pagination->getPagesLinks(); ?>
            </div>
            <div class="search-pages-counter">
                <?php echo $pages?>
            </div>
        </div>
    <?php
    endif;

  3. #3
    War schon öfter hier
    Registriert seit
    23.11.2005
    Ort
    Die schönste Stadt der Welt
    Beiträge
    209
    Bedankte sich
    38
    Erhielt 37 Danksagungen
    in 26 Beiträgen

    Standard Lösung durch Manipulation an den Core-Dateien

    Nur für den Fall, dass es doch einmal jemand sucht...
    Aktuell in der neuesten Joomla-Version 3.9.1 findet man in den Optionen des Suchindex folgende Werte im Menüpunkt Sortierfeld:
    Bildschirmfoto 2019-01-11 um 20.36.08.jpg

    Die Auswahl Titel wird nicht angezeigt, obwohl in der Datei -/components/com_finder/models/search.php der folgende Code zu finden ist:

    PHP-Code:
                /**
             * Load the sort ordering.
             * Currently this is 'hard' coded via menu item parameter but may not satisfy a users need.
             * More flexibility was way more user friendly. So we allow the user to pass a custom value
             * from the pool of fields that are indexed like the 'title' field.
             * Also, we allow this parameter to be passed in either case (lower/upper).
             */
            
    $order $input->getWord('filter_order'$params->get('sort_order''relevance'));
            
    $order StringHelper::strtolower($order);

            switch (
    $order)
            {
                case 
    'date':
                    
    $this->setState('list.ordering''l.start_date');
                    break;

                case 
    'price':
                    
    $this->setState('list.ordering''l.list_price');
                    break;

                case (
    $order === 'relevance' && !empty($this->includedTerms)) :
                    
    $this->setState('list.ordering''m.weight');
                    break;

                
    // Custom field that is indexed and might be required for ordering
                
    case 'title':
                    
    $this->setState('list.ordering''l.title');
                    break;

                default:
                    
    $this->setState('list.ordering''l.link_id');
                    break;
            } 
    Dies kann man leicht ändern durch einen Eingriff in die Datei -/administrator/components/com_finder/config.xml

    HTML-Code:
    		<field
    			name="sort_order"
    			type="list"
    			label="COM_FINDER_CONFIG_SORT_ORDER_LABEL"
    			description="COM_FINDER_CONFIG_SORT_ORDER_DESC"
    			default="relevance"
    			validate="options"
    			>
    			<option value="relevance">COM_FINDER_CONFIG_SORT_OPTION_RELEVANCE</option>
    			<option value="date">COM_FINDER_CONFIG_SORT_OPTION_START_DATE</option>
    			<option value="price">COM_FINDER_CONFIG_SORT_OPTION_LIST_PRICE</option>
    		</field>
    ersetzt man durch

    HTML-Code:
    		<field
    			name="sort_order"
    			type="list"
    			label="COM_FINDER_CONFIG_SORT_ORDER_LABEL"
    			description="COM_FINDER_CONFIG_SORT_ORDER_DESC"
    			default="relevance"
    			validate="options"
    			>
    			<option value="title">COM_FINDER_CONFIG_TITLE_MULTIPLIER_LABEL</option> 
    			<option value="relevance">COM_FINDER_CONFIG_SORT_OPTION_RELEVANCE</option>
    			<option value="date">COM_FINDER_CONFIG_SORT_OPTION_START_DATE</option>
    			<option value="price">COM_FINDER_CONFIG_SORT_OPTION_LIST_PRICE</option>
    		</field>
    Übrigens verstehe ich nicht, wieso es dort einen Punkt "price" gibt. Aber vielleicht liegt das daran, dass ich einmal eine Shop-Komponente installiert hatte.

  4. #4
    Gehört zum Inventar Avatar von Re:Later
    Registriert seit
    21.04.2014
    Ort
    Berlin
    Beiträge
    5.647
    Bedankte sich
    152
    Erhielt 2.198 Danksagungen
    in 1.968 Beiträgen

    Standard

    Diese "Listenpreis" sind irgendwelche Altlasten, die damals, ca. 2013, mit dem Argument "vielleicht könnte irgendeine Komponente, diese Zahlenfelder in der Tabelle mal brauchen und wir überlegen uns später mal, ob wir die Felder anders bezeichnen" nicht entfernt bzw. geändert wurden. Deshalb dümpeln die mit einer vollkommen bescheuerten Bezeichnung seit Jahren undokumentiert im Joomla rum, ohne dass irgendwer was damit anfangen kann.

    Es gibt sogar irgendwo auch noch sale_price in der DB.

    Das SmartSearch wurde wohl irgendwie seinerzeit aus einer bestehenden Komponente/Erweiterung oder was nach Joomla übernommen, wo diese Felder mit dieser Bezeichnung Sinn machten.
    Joomlafachmann: https://www.ghsvs.de

+ Antworten

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein