Revamp Webseite: Übergreifende Suche

From revampedia

For the Joomla 3 Mediawiki search plugin see: Joomla_Mediawiki_Search_Plugin
or find it on my GitHub repository: https://github.com/rebootl/joomla-plg-search-mediawiki-git

Die normale Suche im Joomla umfasst lediglich die Webseite.

Wir möchten für unsere Webseite eine Suchfunktion welche zusätzlich zur Webseite auch unser Wiki, sowie auch den Webshop durchsucht.

Diese soll im Joomla integriert sein.

Recherche / Information

Erweiterungsmöglichkeiten

Es gibt verschiedene Varianten Joomla zu Erweitern.

Module

Module sind die einfachste Erweiterungsmöglichkeit.

A module is a lightweight and flexible extension. They are used for small bits of the page that are generally less complex and are able to be seen across different components. [...]

Modules are lightweight and flexible extensions used for page rendering. These modules are often “boxes” arranged around a component on a typical page.

Plug-ins

A plugin is a kind of Joomla! extension. Plugins provide functions which are associated with trigger events. Joomla provides a set of core plugin events, but any extension can fire (custom) events. [...]

[It means that] either the Joomla! core or a third party component or module can trigger an event which causes one or more plugins to execute some code.

Komponenten

Komponenten sind in der Regel grössere Einheiten, wie ein CiviCRM oder ein Webshop (gem. Andreas). Die Anleitung sehen aber alle etwa gleich kompliziert aus... Auch hat es einige Komponenten welche nicht allzu gross aussehen z.B. Banner.

A component is a kind of Joomla! extension. Components are the main functional units of Joomla!; they can be seen as mini-applications. [...] Created by a component, content is usually displayed in the center of the main content area of a template (depending on the template).

Vorarbeiten

Erste Versuche

Andru, 1.7.15:

Habe veruscht, ein com_caaz Modul zu schreiben, mit folgenden Dateien:

caaz.php
controller.php
views/first/view.html.php
views/first/tmpl/default.php

Hier eine Anleitung: https://docs.joomla.org/J3.x:Developing_a_MVC_Component/Adding_a_view_to_the_site_part Funktioniert jetzt.

Cem, 2015-06-30:

Hello world Komponente gem.: https://docs.joomla.org/J3.x:Developing_a_MVC_Component/Developing_a_Basic_Component

Unter: /var/www/revamp/jupgrade-test/components/com_helloworld/

Beim installieren gab es eine Fehlermeldung.

Funktioniert aber trotzdem. Erreichbar unter: http://test.revamp-it.ch/index.php/de/?option=com_helloworld

Besprechung, Lösungsweg

(2015-06-30, Cem) Besprechung mit Andreas:

Wir haben gesehen dass es bereits verschiedene Such Plugins gibt: "Suche: Inhalt", "Suche: Kontakte"...
Daher sollte es möglich sein einfach ein weiteres zu erstellen. Dieses verwendet dann das Standard Such-Modul (zur Eingabe).

Dafür wäre es doch besser zum testen eine Kopie der Seite zu erstellen.

Testumgebung

Unter: /var/www/revamp/

Kopie von joomla/jupgrade nach jupgrade-test gemacht.

Seite erreichbar unter: https://rochen.revamp-it.ch:25443/revamp/jupgrade-test/index.php/de/

Im phpmyadmin:

Datenbank kopie von joomla_revamp nach joomla_revamp_test erstellt.

Unter: localhost --> Rechte --> revamp_user --> Bearbeiten

Die kopierte DB hinzugefügt mit gleichen Rechten wie alt.

In jupgrade-test/configuration.php die neue DB eingetragen:

     public $db = 'joomla_revamp_test';

Unter jupgrade-test/images/stories logo.gif ersetzt ("testseite").

Wiki wird nicht angezeigt

--> Subdomain test.revamp-it.ch verwenden

In /etc/apache2/sites-available/revamp-it.ch eintragen:

# Test

<VirtualHost *:80>
ServerAdmin webadmin@revamp-it.ch

        DocumentRoot /var/www/revamp/jupgrade-test
        ServerName test.revamp-it.ch

</VirtualHost>

Seite erreichbar unter: http://test.revamp-it.ch

==> kein Effekt

==> es funktioniert, unklar warum, evtl. Tab im firefox neu geöffnet

Entwicklung

Hello Plugin

Ein erstes Suchplugin gemäss Tutorial erstellt: https://docs.joomla.org/J3.x:Creating_a_search_plugin

Unter: /var/www/revamp/jupgrade-test/plugins/search/hellocem/

Das meiste auskommentiert.

Ein Pseudo-Resultat zurückgegeben. Resultat Array gem. Tutorial.

Achtung: Beim Deinstallieren werden die Dateien gelöscht. Daher ist es sicherer im eigenen home zu entwickeln (auf rochen) und dann jeweils zu kopieren.

Datenbankabfrage Wiki

Zum testen die Seite aus der helloworld Komponente verwenden. (Siehe oben unter: #Erste Versuche.)

Mediawiki Plugin

Dokumentation auf separater Seite: Joomla_Mediawiki_Search_Plugin

VirtueMart Plugin

Es ist bereits ein VirtueMart Such-Plugin vorhanden. Dieses scheint aber nicht richtig zu funktionieren.

Dies scheint in der aktuellen VM Version behoben, auf der migrierten Seite (flunder-web) ist zur Zeit das Standard-plugin aktiv.

Debugging

Es ist schwierig direkt vom Plugin sinnvolle debug Ausgaben zu erhalten. Daher habe ich basierend auf der com_helloworld Komponente (siehe oben: Erste Versuche) eine Komponente com_hellovirtuemart erstellt.

Diese ist (auf rochen) zu finden unter:

/var/www/revamp/jupgrade-test/components/com_hellovirtuemart/

Die Komponente kann aufgerufen werden unter: http://test.revamp-it.ch/index.php/en/?option=com_hellovirtuemart

Es lässt sich feststellen, dass einfach ein leeres Array zurückgeliefert wird.

Dort habe ich dann die SQL Abfrage ausgegeben, so wie das Plugin sie aufruft:

SELECT DISTINCT CONCAT( a.product_name, ' (', p.product_sku, ')' ) AS title, 
    a.virtuemart_product_id, 
    a.product_s_desc AS text, 
    p.created_on as created, 
    '2' AS browsernav, 
    GROUP_CONCAT(DISTINCT b.category_name ORDER BY b.category_name SEPARATOR ', ') 
as section, 
    (SELECT pc2.virtuemart_category_id FROM #__virtuemart_product_categories as pc2 
WHERE pc2.virtuemart_product_id = a.virtuemart_product_id LIMIT 1) AS cat_id 

FROM `#__virtuemart_products_de_de` AS a 
    JOIN #__virtuemart_products AS p USING (`virtuemart_product_id`) 
    LEFT JOIN `#__virtuemart_product_categories` AS xref 
ON xref.`virtuemart_product_id` = a.`virtuemart_product_id` 
    LEFT JOIN `#__virtuemart_categories_de_de` AS b 
ON b.`virtuemart_category_id` = xref.`virtuemart_category_id` 
    LEFT JOIN `#__virtuemart_product_shoppergroups` as `psgr` 
ON (`psgr`.`virtuemart_product_id`=`a`.`virtuemart_product_id`) 
    LEFT JOIN `#__virtuemart_product_customfields` AS cf 
ON cf.virtuemart_product_id = a.virtuemart_product_id 
    LEFT JOIN `#__virtuemart_customs` AS customs 
ON customs.virtuemart_custom_id = cf.virtuemart_customfield_id 

WHERE (p.product_sku='laptop' OR a.product_name 
    LIKE '%laptop%' OR b.category_name 
    LIKE '%laptop%' OR a.product_s_desc 
    LIKE '%laptop%' OR a.product_desc 
    LIKE '%laptop%' OR (cf.customfield_value LIKE '%laptop%' )) 
        AND p.published=1 
        AND ( psgr.`virtuemart_shoppergroup_id`= "1" 
        OR psgr.`virtuemart_shoppergroup_id` IS NULL ) 
        AND b.virtuemart_category_id > 0 

GROUP BY xref.virtuemart_product_id 

ORDER BY a.product_name ASC

Vereinfachen der Suche und Test in mysql (auf rochen)

$ mysql -p -D <database-name>
mysql> SELECT virtuemart_product_id FROM j34_virtuemart_products_de_de WHERE product_name LIKE '%laptop%';
Empty set (0.00 sec)

Es werden keine Daten gefunden...

Beim Anschauen der Datenbank in phpmyadmin festgestellt, dass keine Daten in dieser Tabelle sind. Alle unsere Daten sind in der j34_virtuemart_products_en_gb

Das Plugin sucht in sprachspezifischen Tabellen.

Wenn die Sprache auf englisch eingestellt ist, funktioniert die Suche.

Lösung: Das Plugin so patchen, dass immer die englischen Tabellen durchsucht werden.

Fix

Eine Kopie des virtuemart Plugin erstellt unter:

<joomla-root>/plugins/search/virtuemart_langpatch

Dieses entsprechen angepasst.

Im Administrator das standard Virtuemart Plugin deaktiviert und stattdessen das gepatchte installiert und aktiviert.