Получить переменную элемента меню с помощью 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>

Надеюсь, что вы сможете помочь.

----------------------------------- Update ----------- ----------------------------------

У меня проблема: я пытаюсь получить значение переменной из пункта меню, чтобы я мог запускать запрос. Я установил переменную элемента меню, как описано выше, но она не работает.

В качестве альтернативы я пытаюсь получить псевдоним элемента меню, поэтому я могу использовать его в своем запросе и получать результаты.

Ниже приведен код, который я пробовал, но у меня есть некоторые предупреждения, но нет значения переменной. (добавлена ​​структура 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;


}
?>

Строгие стандарты: только переменные должны назначаться по ссылке в C: \ wamp \ www \ tets \ test.php в строке 9

Попытка получить свойство не-объекта в C: \ wamp \ www \ test \ test.php в строке 16

Попытка получить свойство не-объекта в C: \ wamp \ www \ test \ test.php в строке 17

Использую ли я правильный метод для получения псевдонима элемента меню?

2 голоса | спросил Jai 20 FebruaryEurope/MoscowbFri, 20 Feb 2015 05:38:21 +0300000000amFri, 20 Feb 2015 05:38:21 +030015 2015, 05:38:21

2 ответа


1

Если вы запустите этот файл контроллера напрямую, вы не сможете получить активный элемент меню, потому что приложение еще не показано.

Вы запускаете приложение только с помощью $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'); 
ответил Hung Tran 25 FebruaryEurope/MoscowbWed, 25 Feb 2015 10:41:06 +0300000000amWed, 25 Feb 2015 10:41:06 +030015 2015, 10:41:06
0

Используйте следующий код для получения значений полей меню.

$app = JFactory::getApplication();    
$menuid = $app->getMenu()->getActive()->id;
$params = $app->getMenu()->getParams( $menuid );
$city = $params->get('city', 'London');
ответил Nagarjun 26 PMpSun, 26 Apr 2015 14:31:08 +030031Sunday 2015, 14:31:08

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132