2012-05-03 31 views
27

Mam problem tutaj i po prostu nie mogę go rozwiązać: -/Jak uzyskać parametry komponentu?

Pracuję nad komponentem Joomla z backendem. W zapleczu ustawiam parametr, dashboardId, ale nie mogę uzyskać do nich dostępu w widoku. Zawsze otrzymuję data:protected (kiedy zrzucam params). Wygląda na to, że nie mam dostępu do obiektu.

Oto default.xml:

<?xml version="1.0" encoding="utf-8"?> 
<metadata> 
    <layout title="Dashboard"> 
     <message> 
      <![CDATA[dashboard LAYOUT DESCRIPTION]]> 
     </message> 
    </layout> 
    <fields name="params"> 
     <fieldset name="params"> 
      <field 
       name="dashboardId" 
       type="text" 
       label="Dashboard ID" 
       description="com_dashboard_desc" 
       default="1" 
      > 
      </field> 
     </fieldset> 
    </fields> 
</metadata> 

Teraz w view.html.php próbie uzyskania dostępu do parametru takiego:

$app = &JFactory::getApplication(); 
$params = JComponentHelper::getParams('com_dashboard'); 
$dashboardId = $params->get('dashboardId'); 
var_dump($dashboardId); 

Kiedy zrobić var_dump($dashboardId); dostaję NULL ale kiedy zrzucić $app, Widzę, że każda pomoc będzie doceniona! Dzięki

+0

To jest wiadomość, w której zrzucam $ params: object (JRegistry) # 102 (1) {["data": protected] => object (stdClass) # 106 (0) {}} ... i chcę uzyskać dostęp obiekt danych – Nico

Odpowiedz

54

Istnieje prosty sposób. Pierwszy import Joomla komponent Helper:

jimport('joomla.application.component.helper'); 

a następnie pobrać dowolny atrybut chcesz tak:

$dashboardID = JComponentHelper::getParams('com_dashboard')->get('dashboardID'); 

Pozdrowienia.

+3

To jest najlepszy sposób, aby to zrobić w J! 2.5 i> (jak dotąd) – Cleanshooter

+0

To jest poprawny sposób, ponieważ zobaczysz większość właściwości w Joomla jest chroniona [var_dump ($ params) ujawni ci to ] i jedynym sposobem uzyskania do nich dostępu jest wywołanie funkcji. –

-1

miałem ten sam problem, a rozwiązanie było takie:

$input = JFactory::getApplication()->input; 
$parametername = $input->getInt('parametername'); 
echo $parametername; 

Jest to nazwa parametru w default.xml w folderze odsłony tmpl. oto xml

<?xml version="1.0" encoding="utf-8"?> 
<metadata> 
    <layout title="Offers"> 
     <message>This is a component in order to display offers</message> 
    </layout> 
    <state> 
     <name>name</name> 
      <description>description</description> 

     <url addpath="/administrator/components/com_component/elements"> 
      <param name="category_id" section="com_component" type="categoriesmenu" value_field="category_name" label="COM_COMPONENT_CATEGORY_FIELD_SELECT_TITLE" description="COM_COMPONENT_CATEGORY_FIELD_SELECT_TITLE_DESC" /> 
     </url> 
    </state> 

    <fields name="request" > 
     <fieldset name="request" addfieldpath="/administrator/components/com_component/models/fields"> 
      <field name="parametername" type="category" 
       label="category" 
       required="true" 
       description="Perigrafh" 
      /> 
     </fieldset> 
    </fields> 


</metadata> 
11
$app = JFactory::getApplication('site'); 
$componentParams = $app->getParams('com_example'); 
$param = $componentParams->get('paramName', defaultValue); 
+0

Prawdopodobnie nie działa to w backendach, ponieważ 'JFactory :: getApplication ('site')' nadal będzie zwracał obiekt aplikacji administracyjnej, który nie ma metody 'getParams'. –

3

podobne do odpowiedzi udzielonej przez LoboX, polecam użyciu pomocnika komponentu, aby uzyskać parametry komponent:

jimport('joomla.application.component.helper'); // Import component helper library 
$params = JComponentHelper::getParams(JRequest::getVar('option')); // Get parameter helper (corrected 'JRquest' spelling) 
$params->get('parameter_name'); // Get an individual parameter 

W JRequest::getVar('option') Zwraca nazwę swojego komponentu z przedrostek com_. Poza tym wygląda na to, że próbujesz połączyć trochę składni 1.5/1.6 z plikiem konfiguracyjnym. Jeśli jeszcze go nie widziałeś, spróbuj przeczytać dokumentację w wersji 2.5 version. Mam nadzieję że to pomogło!

1

Miałem podobny problem. Mam tylko dane danych: chronione wyniku, aż poszedłem do konfiguracji mojego składnika i zapisałem go. Chociaż w polach tekstowych zostały wydrukowane wartości domyślne, Joomla nie była w stanie ich odczytać przed kliknięciem przycisku "zapisz".

2

To jest podobne do J.T. Odpowiedź Bluma, ale w Joomla 3.x JRequest jest zdeprawowany. Jest to inny sposób na uzyskanie parametrów aplikacji.

$app = JFactory::getApplication(); 
    $input = $app ->input; 
    $componentName = $input ->get('option'); 
    $params = JComponentHelper::getParams($componentName); 
    print_r($params); 
+0

aby uzyskać param, musisz użyć '$ params -> get ('nazwa paramu');' – aspirisen

1

Pomocnik Funkcja do uzyskania obiektu Params we wszystkich wersjach Joomla 1.5/2.5/3.x

class myCompoHelper{ 

    public static function getParams($option) 
    { 

     if (version_compare(JVERSION, '1.5', 'g')) 
     { 
      $application = JFactory::getApplication(); 
      if ($application->isSite()) 
      { 
       $params = $application->getParams($option); 
      } 
      else 
      { 
       jimport('joomla.application.component.helper'); 
       $params = JComponentHelper::getParams($option); 
      } 
     } 
     else 
     { 
      jimport('joomla.application.component.helper'); 
      $params = JComponentHelper::getParams($option); 
     } 
     return $params; 
    } 

} 

$params=myCompoHelper::getParams('com_mycomponent'); 
echo $params->get('myParamName',null); 
0

Od wersji 3.1 Joomla jest w procesie potępiać wszystkie J klas znaczenia wpływu, wersja 4.0 będzie potępiać prawie wszystkie J klas, zalecany sposób od teraz do pobierania składników param jest albo nazywając całą funkcję namespace :

Joomla\CMS\Component\ComponentHelper::getParams('com_dashboard')->get('dashboardID'); 

lub, jeśli pracujesz na modelu, można zadzwonić use kluczowe w celu zaimportowania pliku i użyć klasy w dokumencie, jak

use Joomla\CMS\Component\ComponentHelper; 

function myFunction() { 
    $param = ComponentHelper::getParams('com_dashboard'); 
    $dashboardID = $param->get('dashboardID'); 
}