2012-05-03 24 views
27

Tengo un problema aquí y simplemente no puedo resolverlo: -/¿Cómo obtener los parámetros de los componentes?

Estoy desarrollando un componente de Joomla con back-end. En el backend establecí un parámetro, el dashboardId, pero no puedo acceder a ellos en la vista. Siempre recibo data:protected (cuando descargo params). Parece que no tengo permiso para acceder al objeto.

Aquí es el 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> 

Ahora, en el view.html.php intento acceder al parámetro de la siguiente manera:

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

Cuando hago var_dump($dashboardId); consigo NULL pero cuando yo tiro $app, Puedo ver el dashboardID

¡toda ayuda sería apreciada! Gracias

+0

Ese es el mensaje cuando descargué $ params: object (JRegistry) # 102 (1) {["data": protected] => object (stdClass) # 106 (0) {}} ... y quiero acceder el objeto de datos – Nico

Respuesta

54

Hay una manera más simple. En primer lugar importación Joomla componente de ayuda:

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

y recuperar cualquier atributo que desea de esta manera:

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

saludos.

+3

Esta es la mejor manera de hacerlo en J! 2.5 y> (hasta ahora) – Cleanshooter

+0

Esta es la forma correcta, ya que verá que la mayoría de las propiedades en Joomla están protegidas [var_dump ($ params) se lo revelará a usted ] y la única forma de acceder a ellos es a través de una llamada a función. –

-1

que tenían el mismo problema y la solución fue la siguiente:

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

Este es el nombre de un parámetro en el default.xml en la carpeta vistas tmpl. aquí es el 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

Probablemente no funcione en el back-end porque 'JFactory :: getApplication ('site')' aún devolverá un objeto de aplicación de administración que no tiene el método 'getParams'. –

3

Similar a la respuesta proporcionada por LoboX, le recomiendo usar el ayudante componente para obtener parámetros de componentes:

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 

Los JRequest::getVar('option') devuelve el nombre de su componente con el prefijo com_ Aparte de eso, parece que estás intentando mezclar un poco de sintaxis 1.5/1.6 en tu archivo de configuración. Si aún no lo ha visto, intente leer el 2.5 version de la documentación. ¡Espero que eso ayude!

1

Tuve un problema similar. Solo obtuve los datos : protección resultado hasta que fui a la configuración de mi componente y lo guardé. Aunque había valores predeterminados impresos en los campos de texto, Joomla no pudo leerlos antes de hacer clic en "guardar".

2

Es similar a J.T. Blum responde, pero en Joomla 3.x JRequest está privado. Es otra forma de obtener los parámetros de la aplicación.

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

para obtener un parámetro, debes usar '$ params -> get ('param name');' – aspirisen

1

Helper Función para obtener el objeto Params en todas las versiones de 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

Desde la versión 3.1 de Joomla está en proceso de despreciar todos J clases, la materia efecto, la versión 4.0 será despreciar casi todos J clases, la forma recomendada de ahora en adelante para recuperar los componentes parámetro es o bien llamando a toda la función de espacio de nombres :

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

o, si está trabajando en un modelo, puede llamar a use de palabras clave con el fin de importar el archivo y utilizar la clase en el documento, como

use Joomla\CMS\Component\ComponentHelper; 

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