Revamp Webseite: Übergreifende Suche
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.
- Creation: https://docs.joomla.org/J3.x:Creating_a_Plugin_for_Joomla
- Example: https://docs.joomla.org/J3.x:Creating_a_search_plugin
- Anleitung: http://cocoate.com/de/jdevde/plugin
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.