Revamp Webseite: Übergreifende Suche: Unterschied zwischen den Versionen

Aus revampedia
 
(33 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
''For the Joomla 3 Mediawiki search plugin see:'' [[Joomla_Mediawiki_Search_Plugin]]<br />
 +
''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.
 
Die normale Suche im Joomla umfasst lediglich die Webseite.
  
Zeile 12: Zeile 15:
  
 
==== Module ====
 
==== 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. [...]''
 
''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. [...]''
Zeile 40: Zeile 45:
  
 
==== Komponenten ====
 
==== 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).''
 
''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).''
Zeile 47: Zeile 56:
 
* Tutorial: https://docs.joomla.org/J3.x:Developing_a_MVC_Component/Developing_a_Basic_Component
 
* Tutorial: https://docs.joomla.org/J3.x:Developing_a_MVC_Component/Developing_a_Basic_Component
  
== Stand ==
+
== 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:
  
Es ist nicht klar welche Methode am besten geeignet ist.
+
Hello world Komponente gem.: https://docs.joomla.org/J3.x:Developing_a_MVC_Component/Developing_a_Basic_Component
  
Module sind die einfachste Erweiterungsmöglichkeit.
+
Unter: <code>/var/www/revamp/jupgrade-test/components/com_helloworld/</code>
 +
 
 +
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"...<br />
 +
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: <code>/var/www/revamp/</code>
 +
 
 +
Kopie von <code>joomla/jupgrade</code> nach <code>jupgrade-test</code> gemacht.
 +
 
 +
Seite erreichbar unter: https://rochen.revamp-it.ch:25443/revamp/jupgrade-test/index.php/de/
 +
 
 +
Im phpmyadmin:
 +
 
 +
Datenbank kopie von <code>joomla_revamp</code> nach <code>joomla_revamp_test</code> erstellt.
 +
 
 +
Unter: localhost --> Rechte --> revamp_user --> Bearbeiten
 +
 
 +
Die kopierte DB hinzugefügt mit gleichen Rechten wie alt.
 +
 
 +
In <code>jupgrade-test/configuration.php</code> die neue DB eingetragen:
 +
 
 +
      public $db = 'joomla_revamp_test';
 +
 
 +
Unter <code>jupgrade-test/images/stories</code> logo.gif ersetzt ("testseite").
 +
 
 +
==== Wiki wird nicht angezeigt ====
 +
 
 +
--> Subdomain test.revamp-it.ch verwenden
 +
 
 +
In <code>/etc/apache2/sites-available/revamp-it.ch</code> eintragen:
 +
 
 +
<pre># Test
 +
 
 +
<VirtualHost *:80>
 +
ServerAdmin webadmin@revamp-it.ch
 +
 
 +
        DocumentRoot /var/www/revamp/jupgrade-test
 +
        ServerName test.revamp-it.ch
 +
 
 +
</VirtualHost></pre>
 +
 
 +
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: <code>/var/www/revamp/jupgrade-test/plugins/search/hellocem/</code>
 +
 
 +
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:
 +
 
 +
<code>/var/www/revamp/jupgrade-test/components/com_hellovirtuemart/</code>
 +
 
 +
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:
 +
 
 +
<pre>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
  
Komponenten sind in der Regel grössere Einheiten, wie ein CiviCRM oder ein Webshop (gem. Andreas).
+
ORDER BY a.product_name ASC</pre>
Die Anleitung sehen aber alle etwa gleich kompliziert aus...
 
Auch hat es einige Komponenten welche nicht allzu gross aussehen z.B. Banner.
 
  
Wenn ich es soweit richtig verstehe wäre ein Modul gut für das Eingabefeld der Suche geeignet.
+
Vereinfachen der Suche und Test in mysql (auf rochen)
Dieses müsste dann einen Event auslösen/die Anfrage an ein Plugin oder eine Komponente weiterleiten.
 
Diese wiederum bearbeitet die Anfrage und gibt das Resultat aus.
 
  
In einer Komponente könnte man evtl das Modul einbinden (?).
+
<pre>
 +
$ 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)
 +
</pre>
  
Andreas meint wir könnten auf der echten Seite testen.
+
Es werden keine Daten gefunden...
  
=== Nächste Schritte ===
+
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'''
  
Vorschlag/Evtl.:
+
Das Plugin sucht in sprachspezifischen Tabellen.
  
* Eine Seite (ein Joomla Bericht/Artikel) zum Testen erstellen
+
Wenn die Sprache auf englisch eingestellt ist, funktioniert die Suche.
* Ein eigenes Modul dort einbinden
 
* Damit Experimentieren
 
* ...
 
  
Gemäss obiger Anleitung (http://cocoate.com/de/book/schreiben-sie-ihr-eigenes-modul) wäre es möglich Dateien zu Modulen direkt ins Joomla Verzeichnis einzufügen.
+
'''Lösung:''' Das Plugin so patchen, dass immer die englischen Tabellen durchsucht werden.
  
Siehe dort unter: "Installationspaket des Moduls"
+
=== Fix ===
  
Habe veruscht, ein com_caaz Modul zu schreiben, mit folgenden Dateien:
+
Eine Kopie des virtuemart Plugin erstellt unter:
 +
<pre>
 +
<joomla-root>/plugins/search/virtuemart_langpatch
 +
</pre>
  
caaz.php
+
Dieses entsprechen angepasst.
controller.php
 
view.html.php
 
  
Hier eine Anleitung: https://docs.joomla.org/J3.x:Developing_a_MVC_Component/Adding_a_view_to_the_site_part
+
Im Administrator das standard Virtuemart Plugin deaktiviert und stattdessen das gepatchte installiert und aktiviert.
  
Leider noch ohne Erfolg, das Modul wird nicht erkannt unter: http://revamp-it.ch/joomla/jupgrade/index.php/de/?option=com_caaz
+
[[Category: Programmierung]]
 +
[[Category: Web]]

Aktuelle Version vom 25. September 2017, 17:29 Uhr

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.