web-dev-qa-db-ja.com

クエリ文字列パラメーターを追加してSEF URLを生成する

カスタムのPHPスクリプトがあり、JUMIの下で実行して、データを実行および表示します。

カスタムスクリプトは、次のようなSEF URLにアクセスできます。

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

これは書き換えられたバージョンです

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

次のようなパラメータを適用してデータをフィルタリングしたいと思います

category=mycat&place=myplace

このような

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

そして、私たちはこのようなSEF URLを取得したいと思います

/jumi-script/mycat/myplace

そしてこれらの変数を私のスクリプトで処理します

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

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

これをどのように入手できますか?私たちはテストしています

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

残りのクエリ文字列は失われています。上記は達成できますか?なにか提案を?

ありがとうございました

2
neting.it

ここでcom_jumiのルーター実装を見る https://github.com/BonavalMultimedia/com_jumi/blob/master/com_jumi_bnvl/router.php 私にとって、sefが余分なパラメーターを処理しないようですオン(JumiParseRoute関数を参照)。

この関数を変更して追加のパラメーターを確認し、それらを$vars配列に追加して、JInputまたはJRequestを使用して、以前のJoomlaバージョンを使用している場合に使用できるようにする必要があります。 3.0

パラメータを確認するには、$segmentsパラメータで定義されているかどうかを確認します。

categoryplace、またはその両方があるかどうかを確認するには、独自の基準を決定するか、可能な値をどこにでも格納して、どのセグメントに「タイプ」の値があるかを確認できます。

:私の基準は、URLが常にjumi/category/placeになることです。次に:

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

もちろん、$segmentインデックスが定義されていることを確認し、必要なチェックを行う必要があります。

たぶん、ルートを作成するときにSEFのURLを生成する必要があります。次に、JumiBuildRoute関数を変更して、基準を満たします。

コードを編集する代わり

コンポーネントの宛先コードを編集したくない場合は、次のようなURLを使用します。

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

スクリプトを取得します。これで、古いJoomlaバージョンでは、両方の値にJInputまたはJRequestを介してアクセスできるはずです。

よろしく、

1
Pep Lainez

あなたの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'   =>''
));

またはfilter入力したい場合:

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

各入力はフィルタリングされたタイプとして値を返します。値がない場合はNULLを返します。

0
cwps