2012-05-03 9 views
27

Ho un problema qui e non riesco a risolverlo: -/Come ottenere i parametri del componente?

Sto sviluppando un componente Joomla con back-end. Nel backend ho impostato un parametro, il dashboardId, ma non riesco ad accedervi nella vista. Ottengo sempre data:protected (quando scarico params). Sembra che non mi sia permesso di accedere all'oggetto.

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

Ora, nel view.html.php provo ad accedere al parametro in questo modo:

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

Quando faccio var_dump($dashboardId); ricevo NULL ma quando ho discarica $app, Vedo il dashboardID

ogni aiuto sarebbe apprezzato! Grazie

+0

Questo è il messaggio che io scarico $ params: object (JRegistry) # 102 (1) {["data": protected] => oggetto (stdClass) # 106 (0) {}} ... e voglio accedere l'oggetto dati – Nico

risposta

54

C'è un modo più semplice. Prima importazione Joomla Component Helper:

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

e quindi recuperare qualsiasi attributo che si desidera in questo modo:

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

Saluti.

+3

Questo è il modo migliore per farlo in J! 2.5 e> (finora) – Cleanshooter

+0

Questo è il modo corretto, come vedrete la maggior parte delle proprietà in Joomla è protetto [var_dump ($ params) lo rivelerà a voi ] e l'unico modo per accedervi è tramite una chiamata di funzione. –

-1

Ho avuto lo stesso problema e la soluzione era questa:

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

Questo è il nome di un parametro nel default.xml nella cartella Visto tmpl. Ecco l'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

Probabilmente questo non funziona nel backend perché 'JFactory :: getApplication ('site')' restituirà comunque un oggetto applicazione di amministrazione che non ha il metodo 'getParams'. –

3

Simile alla risposta fornita da LoboX, mi consiglia di utilizzare l'helper componente per ottenere i parametri dei componenti:

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 

I JRequest::getVar('option') restituisce il nome del componente con il prefisso com_. A parte questo, sembra che tu stia cercando di mixare un po 'di sintassi 1.5/1.6 nel tuo file di configurazione. Se non l'hai ancora visto, prova a leggere il documento 2.5 version della documentazione. Spero che aiuti!

1

Ho avuto un problema simile. Ho ottenuto solo i dati : protetto finché non sono passato alla configurazione del mio componente e l'ho salvato. Sebbene ci fossero valori predefiniti stampati nei campi di testo, Joomla non era in grado di leggerli prima di fare clic su "salva".

2

È simile a J.T. Risposta blum, ma in Joomla 3.x JRequest è privato. È un altro modo per ottenere i parametri di apllication.

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

per ottenere un parametro devi usare '$ params -> get ('param name');' – aspirisen

1

Funzione di supporto per ottenere l'oggetto Params in tutte le versioni di 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

Dalla versione 3.1 di Joomla è in corso a deprecare tutti J classi, importa effetto, la versione 4.0 sarà deprecare quasi tutte le J le classi, il metodo consigliato da ora in poi per recuperare componenti param è o chiamando l'intera funzione dello spazio dei nomi :

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

o, se si sta lavorando su un modello, è possibile chiamare use parola chiave al fine di importare il file e utilizzare la classe nel documento, come

use Joomla\CMS\Component\ComponentHelper; 

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