1

質問:データベース テーブル (#__mytable) の値を、Joomla 3.0 プラットフォーム内の XML ファイルからレンダリングされたフォーム テキスト フィールド (motitleおよび)に挿入するにはどうすればよいですか?modescription

-

私はこの「簡単な」Joomla を解決するために何日も試みてきました! ベースの文書化されていないチャレンジ。MVC の開発に関する Joomla! のガイドに従い、古いドキュメントのほとんどを読み、com_contentコンポーネントを分解しましたが、フィールドにデータを入力する方法がまだわかりません。

で遊んでい$this->form->bind($this->item);ます。

以下に、使用している構造を示すためにコードの一部を含めました。途中で見つけた問題を遠慮なく指摘してください。

モデル\フォーム\item.xml

<?xml version="1.0" encoding="UTF-8"?>
<form>
    <fields name="groupOPTIONS">
        <fieldset name="Options">
            <field
                type="text"
                name="motitle"
                id="motitle"
                label="Title"
                description="MY TEXT FIELD DESCRIPTION"
                maxLength="255" />
            <field
                type="textarea"
                name="modescription"
                id="modescription"
                label="Description"
                description="MY TEXT FIELD DESCRIPTION"
                rows="15"
                cols="5"
                maxLength="255" />
        </fieldset>
    </fields>
</form>

モデル\item.php

jimport('joomla.application.component.modelitem');
class MagicObjectsModelItem extends JModelForm {

public function getForm($data = array(), $loadData = true) {
    // Get the form 'items'
    $form = $this->loadForm('com_magicobjects.item', 'item',
        array('control' => 'jform', 'load_data' => $loadData));

if (empty($form)) {
    return false;
}

            return $form;
}

protected function loadFormData() {
    // Check the session for previously entered form data.
    $data = JFactory::getApplication()->getUserState('com_magicobjects.item.edit.data', array());

    if (empty($data)) {
            $data = $this->getDBItem(1);
    }

    return $data;
}

public function getDBItem($pk) {
    //Obtain JDatabase static connection
    $oDb = JFactory::getDbo();
    $oQuery = $oDb->getQuery(true);
    $sValueToMatch = $pk;
    $oQuery
        ->select(array('mid', 'name', 'keyword', 'description'))
        ->from('#__mytable')
        ->where('mid = "' . $sValueToMatch . '"')
        ->order('mid ASC');

    $oDb->setQuery($oQuery);
    return $oDb->loadObjectList();
}

ビュー\アイテム\view.html.php

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

function display($tpl = null) {

    // Initialise variables.
    $this->form = $this->get('Form');
    $this->item = $this->get('Item');

//Display the view
    parent::display($tpl);
}

Views\item\tmpl\default.php

foreach ($this->form->getFieldset('Options') as $field) {
    echo $field->label;
    echo $field->input;
}

item で print_r() を実行すると、データがあることがわかりますが、表示されているフィールドにデータを挿入する必要があります。

データは配列で利用可能ですが、フィールド内では利用できません

4

3 に答える 3

1

Joomla 3 では、JForm::bind()メソッドはオブジェクトまたは連想配列のいずれかをパラメーターとして受け入れるように見えます。すべてのオブジェクト/配列フィールドは、保護されたJRegistry型のデータ メンバーに格納されJForm::$dataます。

フォーム フィールドを表示しようとしている場合 ( を呼び出してJForm::getInput())、コール スタックは次のようになります。

JForm::getInput() -> JForm::getField() -> JForm::loadField() -> JForm::getValue()

JForm::getValue()JRegistry(前述の)JForm::$dataデータ メンバーから値を返します。メソッドは、変数の値が存在しない場合に備えJForm::loadField()て、(フォームで定義された) デフォルト値もメソッドに渡します。JForm::getValue()JForm::$data

モデル内でこれを行うという点では、データベース クエリまたはテーブルからオブジェクトまたは連想配列を生成し (フィールド名がフォーム xml で定義されたフィールド名に対応していることを確認して)、それをJForm::bind()パラメーターとしてに渡すことができます。 . ただし、を使用している場合は、読み込んだフォームにオブジェクト/連想配列を渡すようにJModelFormオーバーライドするだけでよいと思います。JModelForm::loadFormData()

見る :libraries/joomla/form/form.php

それが役立つことを願っています:)

于 2014-02-04T04:26:52.423 に答える
0

関数で$oDb->loadObjectList();使用する$oDb->loadAssoc();代わりに。getDBItem()

これを確認してください - http://docs.joomla.org/Accessing_the_database_using_JDatabase/1.5

これもチェックしてください - joomla loadformdata

これがうまくいくことを願っています。

于 2013-01-08T14:50:04.567 に答える