mouth
Willkommen Gast.
Um die volle Funktionalität des Forums nutzen zu können,
müssen Sie sich einloggen oder registrieren.
Haben Sie Ihre Aktivierungs E-Mail übersehen?

 
Erweiterte Suche

31.110 Beiträge in 6.475 Themen- von 6.477 Mitglieder - Neuestes Mitglied: Frideborg

02-04-2020 06:11:15
JOOM::GALLERY::FORUMArchivJoomGallery 1.5 MVCJoomGallery MVC ALPHA/BETAGelöste Themen: JoomGallery MVCBuild 20090917: Keine Itemid in URL's von JoomGallery Interface mehr?
Seiten: [1] 2
Drucken
Autor Thema: Build 20090917: Keine Itemid in URL's von JoomGallery Interface mehr?  (Gelesen 9772 mal)
0 Mitglieder und 1 Gast betrachten dieses Thema.
Erftralle
Sr. Member
****
Offline Offline

Beiträge: 803


« am: 29-09-2009 11:43:49 »

Hallo,

ich bin gerade bei der Anpassung des Search Plugins auf die JoomGallery MVC Version und musste feststellen, dass einige Interfacefunktionen (z.B. getPictureLink, displayThumb) keine Itemid mehr in die URL für die Detailansicht einbauen.

Meine Frage:
Wird dies noch geändert oder muss man ab jetzt die Itemid selbst in die URL einbauen?

Gruß
Erftralle
« Letzte Änderung: 21-12-2009 22:34:56 von Erftralle » Gespeichert
Chraneco
Entwickler-Team
Hero Member
*****
Offline Offline

Beiträge: 4.066



« Antworten #1 am: 29-09-2009 12:10:25 »

Hi,

im Moment haben wir die Itemid aus fast allen Links entfernt, da der Router von Joomla diese automatisch einfügen kann.
Im Interface funktioniert das leider nicht, da zum Beispiel über die Suche dem Router wahrscheinlich keine aktive Itemid bekannt ist.
Das wird aber wieder eingefügt, sobald wir selbst eine router.php für die Galerie geschrieben haben, vielleicht fügen wir für Erweiterungen auch eine Option im Konfigurationsmanager hinzu, bei der man auswählen kann, welche Itemid verwendet werden soll, wenn keine aktive bekannt ist.

Gruß
Chraneco
Gespeichert

Der Sprecher
Aspergillus
Jr. Member
**
Offline Offline

Beiträge: 223



WWW
« Antworten #2 am: 02-10-2009 17:47:58 »

, vielleicht fügen wir für Erweiterungen auch eine Option im Konfigurationsmanager hinzu, bei der man auswählen kann, welche Itemid verwendet werden soll, wenn keine aktive bekannt ist.

Hallo Chraneco,

Das fände ich super! Grad imInterface kann es gut sein, dass man seine Links und Geschichten mit einer vordefinierbaren ItemID zurück haben möchte und nicht mit der der Joomgallery.

Grüsse
Aspi (der im Moment mit einem Serverumzug beschäftigt ist und darum hier grad nicht so aktiv wie auch schon)
Gespeichert

mbluesunshine
Newbie
*
Offline Offline

Beiträge: 27


« Antworten #3 am: 06-10-2009 16:15:40 »

Hey leute,

wenn ich die aktuelle night build version runterladen möchte,sind dort die hier im forum aufgeführten meisten bugs schon behoben? Oder arbeitet ihr gerade an einer aktuelleren night version.
Gespeichert
Chraneco
Entwickler-Team
Hero Member
*****
Offline Offline

Beiträge: 4.066



« Antworten #4 am: 06-10-2009 17:00:50 »

Hi,

die meisten der Bugs sind dort schon behoben, alle die nach der Veröffentlichung des letzten Builds entdeckt worden sind, werden sehr bald in einem neuen Build behoben sein.

Gruß
Chraneco
Gespeichert

Der Sprecher
Erftralle
Sr. Member
****
Offline Offline

Beiträge: 803


« Antworten #5 am: 19-12-2009 16:07:03 »

Hallo,

ich möchte diesen Thread noch einmal in Erinnerung bringen.
Im Modul Latest Categories verwende ich die Interfacefunktionen "displayThumb()" und "displayDesc()". Die Links, die für die Kategorieansicht und Detailansicht vom Interface zurückgegeben werden, sind sehr unterschiedlich bezüglich ihres Aufbaus.

Die Funktion displayThumb() erzeugt den Thumbnail - Kategorielink mit
Code
$link = JRoute::_('index.php?&view=category&catid='.$obj->catid.$this->getJoomId());
 
, also mit "Itemid" aber ohne "option=com_joomgallery".
Trotzdem erscheint im generierten Link ein "option=com_jommgallery" (auch auf Seiten, die nicht Galerieansichten sind). Anscheinend macht das der Joomla! Router, aber wie weiß der Router, gerade auf Nicht - Galerieansichten, davon? Das ist mir ein Rätsel!?

Den Thumbnail - Detailink hingegen erzeugt die Funktion über den Aufruf von
Code
$link = JHTML::_('joomgallery.openimage', $this->_config['openimage'], $obj, $type);
 
letztendlich mit
Code
$link = JRoute::_('index.php?option=com_joomgallery&view=detail&id='.$image->id);
 
, also mit "option=com_joomgallery" aber ohne "Itemid".
Befinde ich mich auf Galerieseiten, wird im Fall der fehlenden Itemid diese vom Joomla! Router offensichtlich ergänzt. Auf Seiten, die nicht Galerieansichten sind, kann er das offentsichtlich nicht. Das versteh ich auch nicht, da er ja "option=com_joomgallery" ergänzen kann!?.

Die Funktion displayDesc() erzeugt den Kategorie - Textlink mit
Code
$output .= '<a href="'.JRoute::_('index.php?option=com_joomgallery&view=category&catid='.$obj->catid.$this->getJoomId()).'">';
 
, also mit "option=com_joomgallery" und mit "Itemid".

Ich bin daher einigermaßen verwirrt.

Kann mir jemand ein paar Antworten oder Links mit Antworten für meine Fragen geben (ich habe leider nicht viel gefunden)? Da wäre ich wirklich dankbar!

Wird die Behandlung der URL's im Interface noch vereinheitlicht und wenn ja, wie?

Gruß
Erftralle
Gespeichert
Chraneco
Entwickler-Team
Hero Member
*****
Offline Offline

Beiträge: 4.066



« Antworten #6 am: 19-12-2009 17:08:22 »

Hi,

hast du bereits das Build von heute installiert?
In diesem wurde das Setzen der Itemid im Interface wieder eingefügt.

Im Code vor den von dir angesprochenen Stellen wirst du den folgenden Abschnitt finden (in den vorherigen Builds wurde dort nur 'com_joomgallery' gesetzt und noch nicht die Itemid):

Code
      // Get the router
     $router = &$this->_mainframe->getRouter();
     // Get current values of vars 'option' and 'Itemid'
     $option = $router->getVar('option');
     $Itemid = $router->getVar('Itemid');
     // Set vars 'option' and 'Itemid'
     $router->setVar('option', 'com_joomgallery');
     $router->setVar('Itemid', $this->getJoomId(false));
 

Dieser stellt sicher, dass zumindest das 'option=com_joomgallery' in den Link eingefügt wird und außerdem auch eine vorher ausgewählte Itemid. Vielleicht klärt das viele deiner Fragen schon, wenn nicht, frag einfach nochmal nach sm_smile.

Was genau würdest du noch vereinheitlichen?

Gruß
Chraneco
Gespeichert

Der Sprecher
Erftralle
Sr. Member
****
Offline Offline

Beiträge: 803


« Antworten #7 am: 19-12-2009 17:20:11 »

Hi Chraneco,

Zitat von: Chraneco
hast du bereits das Build von heute installiert?
In diesem wurde das Setzen der Itemid im Interface wieder eingefügt.

uups, hatte ich noch gar nicht bemerkt. Ich werde es gleich mal installieren und mir die Änderungen anschauen.

Zitat von: Chraneco
Vielleicht klärt das viele deiner Fragen schon, wenn nicht, frag einfach nochmal nach sm_smile.
 
Werde ich gerne drauf zurückkommen, vielen Dank sm_smile .

Gruß
Erftralle
Gespeichert
Erftralle
Sr. Member
****
Offline Offline

Beiträge: 803


« Antworten #8 am: 19-12-2009 19:07:19 »

Hi Chraneco,

hmmm ... .

Also wenn ich das richtig verstehe, dann wird mit diesem Code dem Joomla! Router vor der Erzeugung einer URL mitgeteilt, welche Komponente ("option") und welche "Itemid" er bei der Generierung der URL benutzen soll? Nach der Erzeugung der URL wird dann dem Router die "option" und die "Itemid" wieder übergeben, die er vor dem Aufruf der JRoute::_() Funktion inne hatte.

Kannst du mir erklären, wo der Unterschied liegt zwischen dieser Methode und der direkten Erzeugung eines Links, wie z.B. in der Funktion displayDesc()?
Code
$output .= '<a href="'.JRoute::_('index.php?option=com_joomgallery&view=category&catid='.$obj->catid.$this->getJoomId()).'">';
 

Wenn es da einen Unterschied gibt, müsste man dann nicht diese Methode auch in dieser Funktion anwenden?

Was ich bis jetzt verstanden habe, ist, das durch die Erweiterungen auf jeden Fall erstmal alle URL's mit "option" und "Itemid" versehen werden.

Ein Rest der Verwirrung bleibt aber immer noch. Ich hoffe, du kannst mich entwirren Roll Eyes .

Gruß
Erftralle
Gespeichert
Chraneco
Entwickler-Team
Hero Member
*****
Offline Offline

Beiträge: 4.066



« Antworten #9 am: 19-12-2009 20:11:15 »

Hi,

stimmt, wir könnten bei allen Links, die direkt mit JRoute gebildet werden, das 'option=com_joomgallery' mit einfügen. Warum das im Moment im Interface nicht überall so ist, frage ich mich jetzt auch.

Fest steht aber, dass wir dieses Vorgehen beim Aufruf von

Code
$link = JHTML::_('joomgallery.openimage', $this->_config['openimage'], $obj, $type);

benötigen, da wir hier nicht mehr direkt eine Änderung am Link vornehmen können. Der Link wird nämlich in einer JHTML-Datei der Galerie erstellt. Dort fügen wir das 'option=com_joomgallery' nicht ein, damit es später einmal leichter ist die Galerie zu klonen.
Die Itemid muss in diesem Fall aber unbedingt so übergeben werden, da die JHTML-Datei die gewünschte Itemid ja nicht "kennen" kann.

Gruß
Chraneco
Gespeichert

Der Sprecher
Erftralle
Sr. Member
****
Offline Offline

Beiträge: 803


« Antworten #10 am: 20-12-2009 09:49:01 »

Hi,

Zitat von: Chraneco
Fest steht aber, dass wir dieses Vorgehen beim Aufruf von

Code
$link = JHTML::_('joomgallery.openimage', $this->_config['openimage'], $obj, $type);

benötigen, da wir hier nicht mehr direkt eine Änderung am Link vornehmen können. Der Link wird nämlich in einer JHTML-Datei der Galerie erstellt. Dort fügen wir das 'option=com_joomgallery' nicht ein, damit es später einmal leichter ist die Galerie zu klonen.
Die Itemid muss in diesem Fall aber unbedingt so übergeben werden, da die JHTML-Datei die gewünschte Itemid ja nicht "kennen" kann.

Das verstehe ich nicht.

So, wie ich es verstanden habe (bitte korrigiere mich, wenn ich falsch liege) führt dieser Aufruf doch zur Ausführung von JHTMLJoomGallery::openImage(...). Und hier wird z.B.
Code
        $link = JRoute::_('index.php?option=com_joomgallery&view=detail&id='.$image->id);
 
verwendet, also mit "option=com_joomgallery". Die Itemid könnte man sich an der Stelle sicherlich auch noch besorgen.

Ich hoffe, ich nerve nicht Roll Eyes .

Um nochmal auf eine früher gestellte Frage zurückzukommen.
In der (leider spärlichen) Dokumentation auf docs.joomla.org kann man nachlesen, dass "option" und "Itemid" in bestimmten Fällen von Joomla! zur URL hinzugefügt werden. Leider gibt es keine Auflistung der Fälle, für die das gilt. Ich habe schon mal den Sourcecode von Joomla! durchforstet aber diese Stelle(n) nicht gefunden, an denen dies passiert.
Weißt du da genaueres?

Gruß
Erftralle
Gespeichert
Chraneco
Entwickler-Team
Hero Member
*****
Offline Offline

Beiträge: 4.066



« Antworten #11 am: 20-12-2009 12:19:49 »

Hi,

Zitat von: Erftralle
Ich hoffe, ich nerve nicht Roll Eyes.

Auf keinen Fall, vielleicht finden wir ja so noch eine bessere Lösung für das Ganze. Ich bin inzwischen nämlich auch schon am überlegen, ob das im Moment wirklich optimal ist.

Stimmt, das 'option=com_joomgallery' steht im Link zur Detailansicht wirklich schon drin. Wenn wir aber konsequent vorgehen, müssten wir das dort auch löschen (eben um die Galerie leichter klonbar so machen).
Falls man zum Beispiel die Slimbox für die Detailansicht verwendet, fehlt das 'option=com_joomgallery' aber schon.

Die Itemid könnte man tatsächlich eventuell über einen Parameter übergeben, ich halte es so aber für sinnvoller, da es sofort bei jeder Funktion ohne Änderung funktioniert. Falls zum Beispiel eine Erweiterung, die jemand schreibt, die Funktion JHTML::popup() verwenden will, müsste dann auch dort dieser weitere Parameter eingebaut werden oder vielleicht möchte jemand JHTML::categoryTree() verwenden: Jedes mal müssten Änderungen an den Dateien der JoomGallery vorgenommen werden. Es bei sämtlichen Funktionen von vorne herein einzubauen, halte ich für unnötig.

Falls du nachlesen willst, wie es zu dem Codeabschnitt mit dem Router gekommen ist, kannst du diesen Thread mal durchlesen.

Zitat von: Erftralle
In der (leider spärlichen) Dokumentation auf docs.joomla.org kann man nachlesen, dass "option" und "Itemid" in bestimmten Fällen von Joomla! zur URL hinzugefügt werden. Leider gibt es keine Auflistung der Fälle, für die das gilt. Ich habe schon mal den Sourcecode von Joomla! durchforstet aber diese Stelle(n) nicht gefunden, an denen dies passiert.
Weißt du da genaueres?

Da kann ich dir leider auch nur das sagen, was ich durch ausprobieren herausgefunden habe (die folgenden Aussagen beziehen sich allerdings nur darauf, wenn JRoute innerhalb einer Komponente aufgerufen wird):
  • Wenn in einem Link weder 'option' noch die Itemid vorhanden ist und auch die Seite, in der JRoute aufgerufen ist keine gültige Itemid besitzt, wird als 'option' die aktuelle Komponente eingefügt und die Itemid weggelassen.
  • Falls im Link weder 'option' noch die Itemid vorhanden ist aber die Seite eine gültige Itemid besitzt, wird im erstellten Link diese Itemid und die 'option', die zu dieser Itemid gehört, verwendet (das muss also nicht unbedingt die 'option' der aktuellen Komponente sein). Es wird dann sogar der zugehörige 'view'-Parameter in den neuen Link mit eingefügt.
  • Besitzt der neue Link bereits eine 'option', wird die Itemid und der View der aufrufenden Seite nur hinzugefügt, falls die 'option' mit der 'option' der aufrufenden Seite übereinstimmt und auch die Itemid zu dieser 'option' passt.
  • Ist im neuen Link nur eine Itemid gegeben, werden alle weiteren Informationen ('option' und 'view') passend zu dieser Itemid hinzugefügt (vollkommen unabhängig von den Angaben der aktuellen Seite).
  • Sind in einem Link eine 'option' und eine Itemid vorhanden, die nicht zueinander passen, ist die Itemid "stärker" und die 'option' wird mit der zur Itemid passenden 'option' überschrieben (es sei denn, es wurde zusätzlich ein View mit angegeben, der Router sieht den Link dann anscheinend als vollständig an und ändert nichts mehr).
  • Sind in einem Link eine 'option' und eine Itemid vorhanden, die zueinander passen, wird nichts mehr verändert, außer dass der View entsprechend der Itemid noch hinzugefügt wird, aber nur, falls im Link kein View vorhanden war.

Wenn ich mir das jetzt nochmal durchlese, kommt es mir sehr verwirrend vor, aber vielleicht hilft es dir ja trotzdem ein wenig weiter sm_smile.

Gruß
Chraneco
Gespeichert

Der Sprecher
Erftralle
Sr. Member
****
Offline Offline

Beiträge: 803


« Antworten #12 am: 20-12-2009 18:31:59 »

Hallo Chraneco,

ich danke dir wirklich sehr für die bereitgestellten Informationen. Ich glaube, dass sie doch sehr zu meinem Verständnis beigetragen haben.
Ich versuche es mal auf den Punkt zu bringen, bitte korrigiere mich, falls ich Unsinn schreibe.

Also, wenn ich es richtig verstanden habe, dann kommt es sehr darauf an, in welchem Kontext (aktives Menü bzw. Itemid und/oder Komponente) ein Link vom Joomla! Router erzeugt, modifiziert und ergänzt wird.

Laut der Joomla! Doku zum Thema Routing
Zitat
Another advantage of using JRoute is that the router now handles $option (the component name) and the $Itemid (the menu item ID). The component itself doesn’t have to know its name ($option) or the active menu item ($Itemid) like it did in previous version of Joomla!.
braucht eine Komponente selbst ja nicht mehr ihren Namen und ihre Itemid zu kennen. Der Joomla! Router ergänzt "option" und "Itemid" entsprechend.
Ich stimme daher mit dir vollkommen überein, dass man innerhalb der Komponente konsequent auf den Gebrauch der "option" und "Itemid" bei der Erzeugung von Links verzichten sollte. Die Frage ist nur, hält der Joomla! Router das, was er verspricht!?

Eine andere Sache ist es dann bei den im Interface der JoomGallery zur Verfügung gestellten Funktionen, welche Links auf die JoomGallery erzeugen bzw. bereitstellen. Da diese Links durchaus in einem anderem Kontext (aktives Menü bzw. Itemid und/oder Komponente) erzeugt werden, muss man hier in den Interfacefunktionen dem Router den Kontext (also "option" und "Itemid") der JoomGallery vor seinem Aufruf mitteilen. Ist der Link fertig vom Router (JRoute::_()) erzeugt, restauriert man den temporär modifizierten Kontext wieder.
Diese Methode sollte man dann auch konsequent nur im Interface einsetzen.

Zitat von: Chraneco
Die Itemid könnte man tatsächlich eventuell über einen Parameter übergeben, ich halte es so aber für sinnvoller, da es sofort bei jeder Funktion ohne Änderung funktioniert. Falls zum Beispiel eine Erweiterung, die jemand schreibt, die Funktion JHTML::popup() verwenden will, müsste dann auch dort dieser weitere Parameter eingebaut werden oder vielleicht möchte jemand JHTML::categoryTree() verwenden: Jedes mal müssten Änderungen an den Dateien der JoomGallery vorgenommen werden. Es bei sämtlichen Funktionen von vorne herein einzubauen, halte ich für unnötig.
Die Itemid ist ja dann hier auch gar nicht notwendig, wird ja JoomGallery - intern automatisch angehängt.
Eine Erweiterung sollte, meiner Meinung nach, niemals JHTML::popup() oder JHTML::categoryTree() direkt verwenden. Dies sollte immer über eine bereitgestellte Funktion im Interface gehen. Und da kann man ja den Router ja wieder entsprechend manipulieren.

Gruß
Erftralle
Gespeichert
Chraneco
Entwickler-Team
Hero Member
*****
Offline Offline

Beiträge: 4.066



« Antworten #13 am: 21-12-2009 11:18:02 »

Hi,

Zitat von: Erftralle
Also, wenn ich es richtig verstanden habe, dann kommt es sehr darauf an, in welchem Kontext (aktives Menü bzw. Itemid und/oder Komponente) ein Link vom Joomla! Router erzeugt, modifiziert und ergänzt wird.

Jep, so sehe ich es auch.

Zitat von: Erftralle
Ich stimme daher mit dir vollkommen überein, dass man innerhalb der Komponente konsequent auf den Gebrauch der "option" und "Itemid" bei der Erzeugung von Links verzichten sollte. Die Frage ist nur, hält der Joomla! Router das, was er verspricht!?

Ich denke schon, dass er das tut, er hat nur leider seine Tücken, auf die man achten muss, aber wenn man dies tut, ist er schon sehr zuverlässig.

Zitat von: Erftralle
Eine andere Sache ist es dann bei den im Interface der JoomGallery zur Verfügung gestellten Funktionen, welche Links auf die JoomGallery erzeugen bzw. bereitstellen. Da diese Links durchaus in einem anderem Kontext (aktives Menü bzw. Itemid und/oder Komponente) erzeugt werden, muss man hier in den Interfacefunktionen dem Router den Kontext (also "option" und "Itemid") der JoomGallery vor seinem Aufruf mitteilen. Ist der Link fertig vom Router (JRoute::_()) erzeugt, restauriert man den temporär modifizierten Kontext wieder.

Stimmt, genau so wird es im Moment gemacht. Wenn ich dich richtig verstehe, bist du also mit der jetzigen Lösung einverstanden?

Zitat von: Erftralle
Die Itemid ist ja dann hier auch gar nicht notwendig, wird ja JoomGallery - intern automatisch angehängt.
Eine Erweiterung sollte, meiner Meinung nach, niemals JHTML::popup() oder JHTML::categoryTree() direkt verwenden. Dies sollte immer über eine bereitgestellte Funktion im Interface gehen. Und da kann man ja den Router ja wieder entsprechend manipulieren.

Jep, es sollte alles über das Interface abrufbar sein, also dass eine Funktion im Interface dann zum Beispiel JHTML::popup() aufruft und dessen Ausgabe an die Erweiterung zurückgibt.
Das ändert aber leider nichts daran, dass man sich zu diesem Zeitpunkt dann nicht "innerhalb" der Komponente befindet, die Funktionen befinden sich zwar in den Dateien der JoomGallery, diese werden aber vom Interface eingebunden und der Router "weiß" nicht, dass er eine Itemid der Galerie benötigt. Somit funktioniert das automatische Anhängen der richtigen Itemid wahrscheinlich nicht und wir müssen sie selbst setzen.

Gruß
Chraneco
Gespeichert

Der Sprecher
Erftralle
Sr. Member
****
Offline Offline

Beiträge: 803


« Antworten #14 am: 21-12-2009 17:51:10 »

Hallo Chraneco,

Zitat von: Chraneco
Wenn ich dich richtig verstehe, bist du also mit der jetzigen Lösung einverstanden?

nachdem ich dank deiner Hilfe sm_smile die jetzige Lösung jetzt verstanden habe, wüsste ich keine Alternative oder sogar eine bessere Lösung.

Ich markiere den Thread daher als gelöst.

Gruß
Erftralle
Gespeichert
Seiten: [1] 2
Drucken
Gehe zu:  

HOSTED BY SCHWARZKÜNSTLER ®

PROTECTED BY  ZB BLOCK  AND Project Honey Pot
Theme orange-lt created by panic

Bad Behavior has blocked 1841 access attempts in the last 7 days.