it-swarm.com.de

Fügen Sie Querystring-Parameter hinzu und generieren Sie eine SEF-URL

wir haben ein benutzerdefiniertes PHP Skript, das unter JUMI ausgeführt wird, um einige Daten auszuführen und anzuzeigen.

Auf das benutzerdefinierte Skript kann über eine SEF-URL zugegriffen werden, z

http://www.mysite.com/jumi-script

das ist eine umgeschriebene Version von

http://www.mysite.com/index.php?option=com_jumi&view=application&fileid=11&Itemid=271

Nun möchten wir Daten anhand von Parametern wie filtern

category=mycat&place=myplace

so was

/index.php?option=com_jumi&view=application&fileid=11&Itemid=271&category=mycat&place=myplace

und wir möchten eine SEF-URL wie diese erhalten

/jumi-script/mycat/myplace

und verarbeite diese Variablen in meinem Skript mit

$mycat = JFactory::getApplication()->input->post->get('category');

$myplace = JFactory::getApplication()->input->post->get('place');

Wie bekommen wir das? wir testen das

$currentUrl =& JURI::getInstance();
$currentUrl->setVar( 'mycat', $catvalue );

aber wir verlieren den Rest der Abfragezeichenfolge. Kann das oben Genannte erreicht werden? Irgendein Vorschlag?

Vielen Dank

2
neting.it

Betrachtet man die Router-Implementierung von com_jumi hier https://github.com/BonavalMultimedia/com_jumi/blob/master/com_jumi_bnvl/router.php für mich scheint es keine zusätzlichen Parameter zu verarbeiten, wenn sef ist ein (siehe JumiParseRoute-Funktion).

Sie müssen diese Funktion ändern, um nach Ihren zusätzlichen Parametern zu suchen und sie dem Array $vars Hinzuzufügen, damit sie mit JInput oder JRequest verfügbar sind, wenn Sie eine Joomla-Version verwenden vor 3.0

Um die Parameter zu überprüfen, prüfen Sie einfach, ob sie im Parameter $segments Definiert sind.

Um festzustellen, ob Sie über ein category, ein place oder beides verfügen, müssen Sie Ihre eigenen Kriterien festlegen oder die möglichen Werte an einer beliebigen Stelle speichern, an der Sie überprüfen können, welcher Werttyp in jedem Segment vorhanden ist.

Beispiel : Mein Kriterium ist, dass URLs immer jumi/category/place sein werden. Dann:

$vars['category'] = $segments[1];
$vars['place'] = $segments[2];

Natürlich müssen Sie überprüfen, ob $segment - Indizes definiert sind, und alle erforderlichen Überprüfungen durchführen.

Möglicherweise möchten Sie beim Erstellen der Routen SEF-URLs erstellen. Dann sollten Sie die Funktion JumiBuildRoute so ändern, dass sie Ihren Kriterien entspricht.

Alternative zum Bearbeiten von Code

Wenn Sie den Routing-Code der Komponente nicht bearbeiten möchten, verwenden Sie eine URL wie die folgende:

http://www.mysite.com/jumi-script?category=mycat&place=myplace

um dein Drehbuch zu bekommen. Auf beide Werte sollte nun in älteren Joomla-Versionen über JInput oder JRequest zugegriffen werden können.

Grüße,

1
Pep Lainez

Für deine URL /index.php?option=com_jumi&view=application&fileid=11&Itemid=271&category=mycat&place=myplace:

$JInput    = JFactory::getApplication()->input;
$myRequest = $JInput->getArray(array(
    'option'  =>'',
    'view'    =>'',
    'fileid'  =>'', 
    'Itemid'  =>'',
    'category'=>'',
    'place'   =>''
));

Oder wenn Sie Filter die Eingabe wollen:

$myRequest = $JInput->getArray(array(
    'option'  =>'Word',
    'view'    =>'alnum',
    'fileid'  =>'int', 
    'Itemid'  =>'int',
    'category'=>'string',
    'place'   =>'string'
));

jede Eingabe gibt den Wert als gefilterten Typ zurück oder NULL, wenn kein Wert vorhanden ist.

0
cwps