1

joomla(2.5) モジュールの開発に問題がありました。カスタム フィールド タイプ addlocation を持つ xml ファイルがあります。

<fieldset name="addLocations" label="Add Locations" addfieldpath="/modules    /mod_pr_weather/elements">
    <field type="addlocation" name="locations"></field>
</fieldset>

addlocation.php ファイルがあり、

<?php

defined('JPATH_BASE') or die;

jimport('joomla.form.formfield');

class JFormFieldAddlocation extends JFormField {
protected $type = 'Addlocations';
protected function getInput() {

$addFrom = '<div id="pr_maindiv">  <h1>'.JText::_('MOD_PR_WEATHER_HEADER_ADD_LOCATION').'</h1>'.$this->getForm("single").'</div>';
    $addFromBlock = '<div id="pr_maindiv_b" style="clear:both;"><h1>'.JText::_('MOD_PR_WEATHER_HEADER_ADD_LOCATION').'</h1>'.$this->getForm("multi").'</div>';

    $doc = JFactory::getDocument();

    $doc->addScriptDeclaration('

            jQuery(document).ready(function(){
                     jQuery("#pr_maindiv_b").css("display","none");
                    jQuery("#jform_params_slideshow_style").change(function(){
                            if(jQuery(this).val()==2){
                              jQuery("#pr_maindiv").css("display","none");
                            jQuery("#pr_maindiv_b").css("display","block");
                                }else{
                                jQuery("#pr_maindiv").css("display","block");
                                jQuery("#pr_maindiv_b").css("display","none");
                                }
                        });

                });

            ');
    return $addFrom . $addFromBlock;
}

private function getForm($type = 'single') {
    $form_type_tooltip =  'class="hasTip" title="' . JText::_('MOD_PR_WEATHER_ADDLOCATION_TOOLTIP') . '"';
    $from='';   
        if ($type=='single') {
            $from = '<p><label'.$form_type_tooltip.'>'.JText::_('MOD_PR_WEATHER_ADDLOCATION_LABEL').'</label></p><p><input type="text" value="GEOLOCATION" placeholder="GEOLOCATION" name="single_location"/></p>
                     <p><input type="button" id="addMore" value="more"></p>';
        }else{

            $from = '<div style="clear:both;" id="first"><h3>Frist Block</h3><p><label'.$form_type_tooltip.'>'.JText::_('MOD_PR_WEATHER_ADDLOCATION_LABEL').'</label></p><p><input type="text" value="GEOLOCATION" placeholder="GEOLOCATION" name="first_block_loc"/></p>
                     <p><input type="button" id="addMoreFrist" value="more"></p></div>';
            $from .= '<div style="clear:both;" id="second"><h3>Second Block</h3><p><label'.$form_type_tooltip.'>'.JText::_('MOD_PR_WEATHER_ADDLOCATION_LABEL').'</label></p><p><input type="text" value="GEOLOCATION" placeholder="GEOLOCATION" name="second_block_loc"/></p>
                     <p><input type="button" id="addMoreSecond" value="more"></p></div>';
            $from .= '<div style="clear:both;" id="third"><h3>Third Block</h3><p><label'.$form_type_tooltip.'>'.JText::_('MOD_PR_WEATHER_ADDLOCATION_LABEL').'</label></p><p><input type="text" value="GEOLOCATION" placeholder="GEOLOCATION" name="third_block_loc"/></p>
                     <p><input type="button" id="addMoreThird" value="more"></p></div>';
            $from .= '<div style="clear:both;" id="fourth"><h3>Fourth Block</h3><p><label'.$form_type_tooltip.'>'.JText::_('MOD_PR_WEATHER_ADDLOCATION_LABEL').'</label></p><p><input type="text" value="GEOLOCATION" placeholder="GEOLOCATION" name="fourth_block_loc"/></p>
                     <p><input type="button" id="addMoreFourth" value="more"></p></div>';
        }
        return $from;
}
}

ボタンタイプのトリガー用のjsファイル:

jQuery("#addMore").click(function(){
jQuery("#pr_maindiv").append("<p style='clear:both;'><input type='text'       value='GEOLOCATION' placeholder='GEOLOCATION' name='single_location[]'/></p>");
});
jQuery("#addMoreFrist").click(function(){
jQuery("div#first").append("<p style='clear:both;'><input type='text'         value='GEOLOCATION' placeholder='GEOLOCATION' name='first_block_loc[]'/></p>");
});
jQuery("#addMoreSecond").click(function(){
jQuery("div#second").append("<p style='clear:both;'><input type='text'     value='GEOLOCATION' placeholder='GEOLOCATION' name='second_block_loc[]'/></p>");
});
jQuery("#addMoreThird").click(function(){
jQuery("div#third").append("<p style='clear:both;'><input type='text'     value='GEOLOCATION' placeholder='GEOLOCATION' name='third_block_loc[]'/></p>");
});
jQuery("#addMoreFourth").click(function(){
jQuery("div#fourth").append("<p style='clear:both;'><input type='text'     value='GEOLOCATION' placeholder='GEOLOCATION' name='fourth_block_loc[]'/></p>");
});  

ボタン型のクリックイベントが発生すると、バックエンドフォームに完全に追加します。ただし、保存をクリックすると、すべての xml フィールド タイプの値が保存されますが、カスタム フィールド タイプはデータベースの params 列に保存されません。なぜ?私の質問が明確でない場合は、完全なファイルをアップロードするように通知してください。ありがとう。

4

2 に答える 2

0

フィールドを定義する際に addlocation.phpでフィールド名を name="jform[first_block_loc]"として設定する 場合は、params 列に値を格納する必要があります。

于 2013-11-21T11:05:40.903 に答える
0

Joomla は、xml 定義で指定した名前の入力フィールドからの結果のみを保存します。したがって、jquery は、変更またはフォームの送信にバインドし、追加した値を連結/結合して、「場所」という名前のフィールドに保存する必要があります。オンロードでは、ロケーションの値に基づいてカスタム フィールドを作成するという逆の操作を行う必要があります (これは、php で簡単に実現できます)。

于 2013-03-11T08:20:18.823 に答える