web-dev-qa-db-ja.com

Jinputを使用してメニュー項目変数を取得する

Joomla 3.3.6を使用していて、メニュー項目タイプの変数を追加しました。この変数の値を取得するには、jinputを使用してデータベースにクエリを実行します。

コントローラーファイルは外部なので、フレームワークを追加しましたが、変数の値を使用できません。

<?php
// Get Joomla! framework 
define( '_JEXEC', 1 ); 
define( '_VALID_MOS', 1 ); 
define( 'JPATH_BASE', realpath(dirname(__FILE__))); 
define( 'DS', DIRECTORY_SEPARATOR ); 
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' ); 
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' ); 
$mainframe =&JFactory::getApplication('site'); 
$mainframe->initialise(); 

$jinput = JFactory::getApplication()->input;
$city = $jinput->get('city');


include('config.php');
$mysqli->set_charset("utf8");
if($stmt=$mysqli->prepare("SELECT * from test where City=?"));{
$stmt->bind_param("s",$city);
$result=$stmt->execute();
$result = $stmt -> get_result();
$arr = array();
if($result->num_rows >"0") {
while($row = $result->fetch_assoc()) {
        $arr[] = $row;  
    }
}
# JSON-encode the response
$json_response = json_encode($arr);

// # Return the response
echo $json_response;

}
?>

メニュー変数のxmlファイルは

<metadata>

    <layout title="COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_TITLE">

        <message>COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_DESC</message>

    </layout>

    <fields name="request">
        <fieldset name="request">
            <field
                    name="city"
                    type="list"
                    label="COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_LABEL"
                    description="COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_DESC"
                    default="London">
                                <option value="London">London</option>
                                <option value="Paris">paris</option>
                                <option value="New Delhi">New Delhi</option>
                                <option value="Amsterdam">Amsterdam</option>
                                <option value="Las vegas">Las vegas</option>
                                <option value="Birmingham">Birmingham</option>
                                <option value="new york">new york</option>
                                <option value="mumbai">mumbai</option>
                        </field>
        </fieldset>
    </fields>

</metadata>

お役に立てれば幸いです。

- - - - - - - - - - - - - - - - - -更新 - - - - - - - -------------------------------

問題を特定します。クエリを実行できるように、メニュー項目から変数値を取得しようとしています。上記のようにメニュー項目変数を設定しましたが、機能しません。

別の方法として、メニュー項目のエイリアスを取得して、クエリで使用して結果を取得できるようにしています。

以下は私が試したコードですが、いくつかの警告が表示されますが変数値はありません。(外部ファイルにjoomlaフレームワークを追加)

<?php
// Get Joomla! framework 
define( '_JEXEC', 1 ); 
define( '_VALID_MOS', 1 ); 
define( 'JPATH_BASE', realpath(dirname(__FILE__))); 
define( 'DS', DIRECTORY_SEPARATOR ); 
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' ); 
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' ); 
$mainframe =&JFactory::getApplication('site'); 
$mainframe->initialise(); 

$menu = JFactory::getApplication()->getMenu();
$alias = $menu->getActive()->alias;


$jinput = JFactory::getApplication()->input;
$city = $jinput->get('city');

include('config.php');
$mysqli->set_charset("utf8");
//$rcity ="london";
if($stmt=$mysqli->prepare("SELECT * from ratedmain where City=?"));{
$stmt->bind_param("s",$alias);
$result=$stmt->execute();
$result = $stmt -> get_result();
$arr = array();
if($result->num_rows >"0") {
while($row = $result->fetch_assoc()) {
        $arr[] = $row;  
    }
}
# JSON-encode the response
$json_response = json_encode($arr);

// # Return the response
echo $json_response;
echo $parentname;


}
?>

厳格な基準:9行目のC:\ wamp\www\tets\test.phpで参照によって変数のみを割り当てる必要があります

16行目のC:\ wamp\www\test\test.phpの非オブジェクトのプロパティを取得しようとしています

17行目のC:\ wamp\www\test\test.phpの非オブジェクトのプロパティを取得しようとしています

メニュー項目のエイリアスを取得するために正しい方法を使用していますか?

2
Jai

このコントローラーファイルを直接実行すると、アプリケーションがまだレンダリングされていないため、アクティブなメニュー項目を取得できません。

$mainframe->initialise();を使用してアプリケーションを初期化するだけですが、開始するには$mainframe->execute();を使用する必要がありますが、これを実行するとアプリケーション全体がレンダリングされ、この呼び出しの下のコードはまったく呼び出されません。 $mainframe->initialise();$mainframe->execute();に置き換えることで、これを自分で試すことができます

これを解決するには、このコントローラーをコンポーネント内に配置する必要があります。その後、パラメーターとエイリアスを取得できます。

$menu = JFactory::getApplication()->getMenu();
$menuItem = $menu->getActive();
$alias = $menuItem->alias;
$yourParamValue = $menuItem->params->get('your_param_name');

9行目のエラーを修正するには、「&」記号を削除する必要があります。

$mainframe = JFactory::getApplication('site'); 
1
Hung Tran

次のコードを使用して、メニュー項目フィールドの値を取得します。

$app = JFactory::getApplication();    
$menuid = $app->getMenu()->getActive()->id;
$params = $app->getMenu()->getParams( $menuid );
$city = $params->get('city', 'London');
0
Nagarjun