Bild im Suchergebnis ?

Fragen zur Installation von CONTENIDO 4.10? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
peanut
Beiträge: 246
Registriert: Do 25. Nov 2004, 19:34
Kontaktdaten:

Bild im Suchergebnis ?

Beitrag von peanut » Do 17. Nov 2022, 11:32

Hallo zusammen

Ich wollte fragen ob jemand einen Trick auf Lager hat, um das Bild vom standard Bild Modul CMS_img von den Artikeln - als zusätzliches Suchergebnis auszugeben.

Code: Alles auswählen

{$result|var_dump}
liefert leider kein Bild zurück by default ... hmmm ...

Geht um Contenido 4.10.1 und das Basis search_results Modul.

Vielen Dank schon mal im Voraus.
du liest nie ein Buch und weisst weise der Bildung auszuweichen ....

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Bild im Suchergebnis ?

Beitrag von xmurrix » Mo 21. Nov 2022, 11:12

Hallo peanut,

um Bilder in Suchergebnissen anzuzeigen, musst du folgende Änderungen machen.

1. Datei cms/data/modules/content_search_results/php/class.module.search_result.php

Darin gibt es die Funktion _getResults(), in dieser Funktion werden Inhalte/Daten der Suchergebnisse zusammengestellt, hier musst du die Funktion wie folgt anpassen. In diesem Beispiel wird davon ausgegangen, dass Bilder immer in CMS_IMG[1] zu finden sind.

Code: Alles auswählen

    protected function _getResults() {
        if (NULL === $this->_searchResults) {
            return array();
        }

        // get current result page
        $searchResultPage = $this->_searchResults->getSearchResultPage($this->_page);

        // skip if current page has no results
        if (0 == count($searchResultPage) > 0) {
            return array();
        }

        // build single search result on result page
        $entries = array();
        $i = 0;
        foreach (array_keys($searchResultPage) as $idart) {

            $i++;

            // get absolute number of current search result
            $number = $this->_itemsPerPage * ($this->_page - 1) + $i;

            // get headlines
            $headlines = $this->_searchResults->getSearchContent($idart, 'HTMLHEAD', 1);
            $headline = cString::trimAfterWord($headlines[0], $this->_maxTeaserTextLen);

            // get subheadlines
            $subheadlines = $this->_searchResults->getSearchContent($idart, 'HTMLHEAD', 2);
            $subheadline = cString::trimAfterWord($subheadlines[0], $this->_maxTeaserTextLen);

            // get paragraphs
            $paragraphs = $this->_searchResults->getSearchContent($idart, 'HTML', 1);
            $paragraph = cString::trimAfterWord($paragraphs[0], $this->_maxTeaserTextLen);

            // get similarity
            $similarity = $this->_searchResults->getSimilarity($idart);
            $similarity = sprintf("%.0f", $similarity);

            // image
            $image = null;
            $artLang = new cApiArticleLanguage();
            if ($artLang->loadByArticleAndLanguageId($idart, cRegistry::getLanguageId())) {
                $idUpl = $artLang->getContent('CMS_IMG', 1);
                if (0 < cString::getStringLength($idUpl)) {
                    $clientConfig = cRegistry::getClientConfig(cRegistry::getClientId());

                    $upload = new cApiUpload($idUpl);
                    if ($upload->isLoaded()) {
                        $dirname = $upload->get('dirname');
                        $filename = $upload->get('filename');
                        $imageSrc = $clientConfig['upl']['htmlpath'] . $dirname . $filename;
                        $fullDirname = $clientConfig['upl']['path'] . $dirname;
                        if (cFileHandler::exists($fullDirname . $filename)) {
                            list($imageWidth, $imageHeight) = getimagesize($fullDirname . $filename);
                            $image = new stdClass();
                            $image->src = $imageSrc;
                            $image->width = $imageWidth;
                            $image->height = $imageHeight;
                        }
                    }
                }
            }

            // build link to that result page
            $href = cUri::getInstance()->build(array(
                'lang' => cRegistry::getLanguageId(),
                'idcat' => $this->_searchResults->getArtCat($idart),
                'idart' => $idart
            ));

            // assemble entry
            $entries[] = array(
                'number' => $number,
                'headline' => $headline,
                'subheadline' => $subheadline,
                'paragraph' => $paragraph,
                'similarity' => $similarity,
                'image' => $image,
                'href' => $href
            );
        }

        $lower = ($this->_page - 1) * $this->_itemsPerPage + 1;
        $upper = $lower + count($entries) - 1;
        $total = $this->_searchResults->getNumberOfResults();

        $this->_msgRange = sprintf($this->_label['msgRange'], $lower, $upper, $total);

        return $entries;
    }

2. Template cms/data/modules/content_search_results/template/get.tpl

Im Template kannst du z. B. das Bild in Suchergebnissen ausgeben

Code: Alles auswählen

<ul id="search_result">
{foreach item=result from=$results}
    <li>
        <span>{$result.number}</span>
        {if $result.image}
            <pre>{$result.image|@print_r}</pre>
        {/if}
        <a href="{$result.href}">{$result.headline}</a>
        <p>{$result.paragraph}</p>
    </li>
{/foreach}
</ul>
Viele Grüße

xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

Antworten