web-dev-qa-db-fra.com

Récupère la variable d'élément de menu en utilisant Jinput

J'utilise joomla 3.3.6 et j'ai ajouté une variable de type d'élément de menu. Je veux obtenir la valeur de cette variable en utilisant jinput pour interroger la base de données.

Le fichier du contrôleur est externe, j'ai donc ajouté le framework, mais la valeur de variable n'est pas disponible.

<?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;

}
?>

Le fichier XML pour la variable de menu est

<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>

J'espère que vous pourrez aider.

-----------------------------------Mise à jour-------------- -------------------------------

Définir un problème: j'essaie d'obtenir la valeur de variable de l'élément de menu afin de pouvoir exécuter une requête. J'ai défini une variable d'élément de menu comme décrit ci-dessus, mais cela ne fonctionne pas.

Comme alternative, j'essaie d'obtenir l'alias d'élément de menu afin que je puisse l'utiliser dans ma requête et obtenir des résultats.

Vous trouverez ci-dessous le code que j'ai essayé, mais je reçois quelques avertissements mais aucune valeur de variable (joomla framework ajouté au fichier externe).

<?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;


}
?>

Normes strictes: Seules les variables doivent être attribuées par référence dans C:\wamp\www\tets\test.php à la ligne 9

Essayer d'obtenir la propriété de non-objet dans C:\wamp\www\test\test.php à la ligne 16

Essayer d'obtenir la propriété de non-objet dans C:\wamp\www\test\test.php à la ligne 17

Est-ce que j'utilise la bonne méthode pour obtenir l'alias d'élément de menu?

2
Jai

Si vous exécutez ce fichier de contrôleur directement, vous ne pouvez pas obtenir l'élément de menu actif car l'application n'est pas encore rendue.

Vous ne démarrez l’application qu’en utilisant $mainframe->initialise();, mais pour la démarrer, vous devez utiliser $mainframe->execute();; toutefois, cette opération affichera l’application entière et le code situé au-dessous de cet appel ne sera pas appelé du tout. . Vous pouvez essayer cela vous-même en remplaçant $mainframe->initialise(); par $mainframe->execute();

Pour résoudre ce problème, vous devez placer ce contrôleur dans votre composant, vous pouvez alors obtenir les paramètres et l'alias:

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

Pour corriger l'erreur sur la ligne 9, vous devez supprimer le symbole "&".

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

Utilisez le code suivant pour obtenir les valeurs de champ d'élément de menu.

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