In Mosets Tree, einer Link- oder Firmenverzeichnis Komponente für Joomla, lassen sich Listings nach maximal zwei Parameter sortieren. Zum Beispiel Featured Listing und Erstell-Datum. Dies war mir nicht genug und deshalb habe ich ein drittes Sortier-Kriterium hinzugefügt.
Ich benutzte Version 2.1.3, der Hack sollte aber auch mit jeder 2.1.x Version möglich sein, da keine Änderungen an der Programm-Logik erfolgen.
Als Minimum sind 4 Dateien zu editieren und 2 Datenbankeinträge, in die Tabelle jos_mt_config, hinzuzufügen.
- Als erstes ein Backup durchführen. Verwendung auf eigene Gefahr hin! Ich übernehme keine Verantwortung bei Daten-Verlust.
- SQL-Statments erweitern. Mit Hilfe des Editors der Wahl, das gesamte Installationsverzeichnis von Joomla nach dem folgenden String durchsuchen: first_listing_order1. Uns interessieren nur die SQL-Statments, da nur hier der neue Parameter angehängt wird. Am Ende des SQL Abfrage den folgenden Code anhängen:
. ', ' . $mtconf->get('third_listing_order1') . ' ' . $mtconf->get('third_listing_order2')
- Hinzufügen eines Beschreibungs-Strings in die ini-Datei
Als nächstes fügen wir eine neue Zeile in die Datei:
/administrator/language/en-GB/en-GB.com_mtree.ini ein. Dazu suchen wir nach: FIRST_LISTING_ORDER1 in Zeile # 315 und fügen als eine neue Zeile ein:CONFIGNAME THIRD_LISTING_ORDER1=Tertiary ordering
- Einfügen zweier Datensätze in die Tabelle: jos_mt_config
- Prüfen ob in der Verwaltung der dritte Parameter zur Verfügung steht
- [Optional] Anpassen des Installation-Scripts
Um beim installieren der Komponente schon die Tabellen Einträge anzulegen, einfach die Datei /administrator/components/com_mtree/install.mtree.sql um die folgenden Zeilen ergänzen:
Beim einfügen des Codeschnippsel ist unbedingt darauf aufzupassen, dass nicht alle SQL-Statements in der gleichen Weise enden. Im Prinzip geht es darum, and das Ende der Order Klausel einen weiteren ORDER BY Parameter anzuhängen. Wobei der dritte Sortier-Parameter durch ein Komma getrennt wird.
Beispiel: components/com_mtree/mtree.php, in Zeile 509 und ersetze den existierenden Code:
if( $mtconf->get('min_votes_to_show_rating') > 0 && $mtconf->get('first_listing_order1') == 'link_rating' ) { $sql .= "\n ORDER BY link_votes >= " . $mtconf->get('min_votes_to_show_rating') . ' DESC, ' . $mtconf->get('first_listing_order1') . ' ' . $mtconf->get('first_listing_order2') . ', ' . $mtconf->get('second_listing_order1') . ' ' . $mtconf->get('second_listing_order2'); } else { $sql .= "\n ORDER BY " . $mtconf->get('first_listing_order1') . ' ' . $mtconf->get('first_listing_order2') . ', ' . $mtconf->get('second_listing_order1') . ' ' . $mtconf->get('second_listing_order2'); }
mit:
if( $mtconf->get('min_votes_to_show_rating') > 0 && $mtconf->get('first_listing_order1') == 'link_rating' ) { $sql .= "\n ORDER BY link_votes >= " . $mtconf->get('min_votes_to_show_rating') . ' DESC, ' . $mtconf->get('first_listing_order1') . ' ' . $mtconf->get('first_listing_order2') . ', ' . $mtconf->get('second_listing_order1') . ' ' . $mtconf->get('second_listing_order2') . ', ' . $mtconf->get('third_listing_order1') . ' ' . $mtconf->get('third_listing_order2'); } else { $sql .= "\n ORDER BY " . $mtconf->get('first_listing_order1') . ' ' . $mtconf->get('first_listing_order2') . ', ' . $mtconf->get('second_listing_order1') . ' ' . $mtconf->get('second_listing_order2') . ', ' . $mtconf->get('third_listing_order1') . ' ' . $mtconf->get('third_listing_order2');
Dies dient in erster Linie der Illustration, was zu tun ist. Die Schritte sind für die folgenden Dateien zu wiederholen
/administrator/components/com_mtree/admin.mtree.php
Zeilen #: 1734, 1736, 1741, 1743
/administrator/components/com_mtree/mAdvancedSearch .class.php
Zeilen #: 146, 148
/components/com_mtree/mtree.php
Zeilen #: 510, 512, 547, 549, 685, 911, 1210, 1212, 1399, 1401, 1581, 1583
INSERT INTO `jos_mt_config` (`varname`, `groupname`, `value`, `default`, `configcode`, `ordering`, `displayed`) VALUES('third_listing_order1', 'listing', 'link_created', 'link_created', 'listing_order', 2200, 1); INSERT INTO `jos_mt_config` (`varname`, `groupname`, `value`, `default`, `configcode`, `ordering`, `displayed`) VALUES('third_listing_order2', 'listing', 'asc', 'asc', 'sort_direction', 2300, 1);
INSERT IGNORE INTO `#__mt_config` VALUES ('third_listing_order1', 'listing', 'link_created', 'link_created', 'listing_order', 2200, 1); INSERT IGNORE INTO `#__mt_config` VALUES ('third_listing_order2', 'listing', 'asc', 'asc', 'sort_direction', 2300, 1);
Als Chefkoch arbeite ich als Systemadministrator und Programmierer. Hier blogge ich über Joomla, Magento, WordPress und Windows. In meiner Freizeit fotografiere ich viel, fahre mit meiner Yamaha XT660R oder Jogge durch die Gegend.