2017-07-16 8 views
0

私はJoomla Component Builderを使用して、小さなコンポーネントをすばやく作成します。今私は単純なカタログコンポーネントを作成し、時間がカテゴリを追加するために来て、他のすべての思考がうまくいくようだが、問題があるので。Joomla 3のコンポーネントにカテゴリを追加する

カテゴリのすべてのコードがうまく作成されました。私は新しいカテゴリを追加することができ、DBに保存しますが、カタログアイテムを編集するときにはこの猫は表示されませんでした。 問題がどこにあるのかを見つけようとしましたが、いくつかのアイテムとカテゴリのリストにcatidを追加することでデータベースに変更が加えられましたが、編集モードではコンボボックスにはまだルート要素しかありません。

私はitem.xmlファイル\フォーム\ \モデルをチェックして、フィールドの説明を見つける:

<!-- Catid Field. Type: Category. (joomla) --> 
<field 
    type="category" 
    name="catid" 
    label="COM_SKYCATALOG_ITEM_CATID_LABEL" 
    extension="com_skycatalog.list" 
    required="true" 
    show_root="true" 
    description="COM_SKYCATALOG_ITEM_CATID_DESCRIPTION" 
    published="true" 
/> 

それはすべてOKらしいです。

答えて

0

標準的な方法ではうまくいかず、私はそれとは違う方法で動作します。

<?php 

// No direct access to this file 
defined('_JEXEC') or die('Restricted access'); 

JFormHelper::loadFieldClass('list'); 

/** 
* skycatalog Form Field class for the skycatalog component 
* 
* @since 0.0.1 
*/ 
class JFormFieldSkyCatalog extends JFormFieldList 
{ 
    /** 
    * The field type. 
    * 
    * @var   string 
    */ 
    protected $type = 'skycatalog'; 

    /** 
    * Method to get a list of options for a list input. 
    * 
    * @return array An array of JHtml options. 
    */ 
    protected function getOptions() 
    { 
     $db = JFactory::getDBO(); 
     $query = $db->getQuery(true); 
     $query->select('id, title'); 
     $query->from('#__categories'); 
     // Retrieve only published items 
     $query->where('#__categories.published = 1','and'); 
     $query->where("#__categories.extension like 'com_skycatalog.list'",'and'); 


     $db->setQuery((string) $query); 
     $messages = $db->loadObjectList(); 
     $options = array(); 

     if ($messages) 
     { 
      foreach ($messages as $message) 
      { 
        $options[] = JHtml::_('select.option', $message->id, $message->title); 
      } 
     } 

     $options = array_merge(parent::getOptions(), $options); 

     return $options; 
    } 
} 

と変更フィールドタイプ::私はちょうどカスタムフィールドを追加

<field 
    type="Skycatalog" 
    name="catid" 
    class="inputbox" 
    label="COM_SKYCATALOG_ITEM_CATID_LABEL" 
    extension="com_skycatalog" 
    required="true" 
    description="COM_SKYCATALOG_ITEM_CATID_DESCRIPTION" 
    published="true" 
/> 

をそして今、それだけで正常に動作します。 よくあるのは、改善するべきことがたくさんあります。例えば、カテゴリに木のようなパディングを追加するなどです。

0

確かにcom_skycatalog.listは正しいですか? #__categoriesテーブルをチェックして、正しいコンテキストを使用していることを確認してください。

代わりにcategoryeditを試しましたか?

+0

'categoryedit'はカテゴリIDを表示するので大丈夫ですが' category'でもルートエントリだけが表示されます: –

関連する問題