2012-05-03 19 views
27

Tôi gặp sự cố ở đây và không thể giải quyết vấn đề này: -/Làm cách nào để lấy thông số thành phần?

Tôi đang phát triển một thành phần Joomla với chương trình phụ trợ. Trong chương trình phụ trợ, tôi đặt tham số, dashboardId, nhưng tôi không thể truy cập chúng trong chế độ xem. Tôi luôn nhận được data:protected (khi tôi bán params). Có vẻ như tôi không được phép truy cập vật thể.

Đây là 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> 

Bây giờ, trong view.html.php tôi cố gắng truy cập vào các thông số như thế này:

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

Khi tôi làm var_dump($dashboardId); tôi nhận được NULL nhưng khi tôi đổ $app, Tôi có thể xem số dashboardID

mọi trợ giúp sẽ được đánh giá cao! Cảm ơn

+0

Thats thông điệp wenn tôi đổ $ params: object (JRegistry) # 102 (1) {["data": protected] => object (stdClass) # 106 (0) {}} ... và tôi muốn truy cập đối tượng dữ liệu – Nico

Trả lời

54

Có một cách đơn giản hơn. đầu tiên nhập khẩu Joomla Component Helper:

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

Và sau đó lấy bất kỳ thuộc tính bạn muốn như thế này:

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

Greetings.

+3

Đây là cách tốt nhất để làm điều đó trong J! 2.5 và> (cho đến nay) – Cleanshooter

+0

Đây là cách chính xác, vì bạn sẽ thấy hầu hết các thuộc tính trong Joomla được bảo vệ [var_dump ($ params) sẽ tiết lộ điều này cho bạn ] và cách duy nhất để truy cập chúng là thông qua một cuộc gọi hàm. –

-1

tôi đã cùng một vấn đề và giải pháp là thế này:

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

Đây là tên của một tham số trong default.xml trong thư mục quan điểm tmpl. đây 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

Điều này có thể không hoạt động trong backend vì 'JFactory :: getApplication ('site')' sẽ vẫn trả về một đối tượng ứng dụng quản trị không có phương thức 'getParams'. –

3

Tương tự như các câu trả lời được cung cấp bởi LoboX, tôi khuyên bạn nên sử dụng các helper thành phần để có được các thông số thành phần:

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 

Các JRequest::getVar('option') lợi nhuận tên của thành phần của bạn với tiền tố com_. Bên cạnh đó, có vẻ như bạn đang cố gắng kết hợp một chút cú pháp 1.5/1.6 vào tệp cấu hình của bạn. Nếu bạn chưa thấy nó, hãy thử đọc qua 2.5 version của tài liệu. Tôi hy vọng rằng sẽ giúp!

1

Tôi gặp sự cố tương tự. Tôi chỉ nhận được dữ liệu : được bảo vệ kết quả cho đến khi tôi đi đến cấu hình của thành phần của mình và lưu nó. Mặc dù có các giá trị mặc định được in trong các textfields Joomla không thể đọc chúng trước khi nhấp vào 'save'.

2

Nó là mô phỏng với J.T. Blum trả lời, nhưng trong Joomla 3.x JRequest là depricated. Nó là một cách khác để có được các tham số của apllication.

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

để có được một param bạn phải sử dụng '$ params -> get ('param name');' – aspirisen

1

Chức năng trợ giúp để lấy Params Object trong tất cả các phiên bản 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

Kể từ phiên bản 3.1 Joomla đang trong quá trình không chấp tất cả J lớp học, quan trọng có hiệu lực, phiên bản 4.0 sẽ không dùng hầu hết J lớp, cách được đề nghị từ giờ trở đi để lấy linh kiện param hoặc là kêu gọi toàn bộ chức năng không gian tên :

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

hoặc, nếu bạn đang làm việc trên một mô hình, bạn có thể gọi use từ khóa để nhập khẩu các tập tin và sử dụng lớp xuống trong tài liệu, như

use Joomla\CMS\Component\ComponentHelper; 

function myFunction() { 
    $param = ComponentHelper::getParams('com_dashboard'); 
    $dashboardID = $param->get('dashboardID'); 
} 
Các vấn đề liên quan