2017-02-23 11 views
3
  1. にデータベースから取得したチェックボックスにチェックすることは、それが下向きに起こっている、すべてのチェックボックスがでなければなりません「すべてのフィールド」のチェックボックスをクリックしたときに4層
  2. としてそれを作るためにどのような方法があることはとても長いですチェック

これはどのように行うのですか?
私のコード: -チェックボックスのスタイリングと、それは

protected function getConfigForm() 
    {   
     $sql = 'SELECT id_order_state,name FROM '._DB_PREFIX_.'order_state_lang'; 
     $results = Db::getInstance()->ExecuteS($sql); 

     $values_query = array(array(
      'id' => 'AllFields', 
      'name' => $this->l('All Fields'), 
      'val' => 'All', 
     )); 
     foreach ($results as $row) { 
      $values_query[] = array(
       'id' => 'OrderID', 
       'name' => $this->l($row['name']), 
       'val' => $row['id_order_state'], 
       'required' => true, 
      ); 
     } 

     return array(
      'form' => array(
       'legend' => array(
        'title' => $this->l('Settings'), 
        'icon' => 'icon-cogs', 
       ), 
       'input' => array(     
        array(
         'type' => 'checkbox', 
         'label' => $this->l('Select Required Status'), 
         'required' => true, 
         'values' => array(
          'query' => $values_query, 
          'id' => 'id', 
          'name' => 'name' 
         ), 
        ), 
       ), 
       'submit' => array(
        'title' => $this->l('Save'), 
       ), 
      ), 
     ); 
    } 

答えて

0

管理フォームは/adminXXX/themes/default/template/helpers/form/form.tplテンプレートファイルを使用してレンダリングされます。クラス/classes/helper/Helper.php

方法createTemplate()があります:

public function createTemplate($tpl_name) 
{ 
    if ($this->override_folder) { 
     if ($this->context->controller instanceof ModuleAdminController) { 
      $override_tpl_path = $this->context->controller->getTemplatePath().$this->override_folder.$this->base_folder.$tpl_name; 
     } elseif ($this->module) { 
      $override_tpl_path = _PS_MODULE_DIR_.$this->module->name.'/views/templates/admin/_configure/'.$this->override_folder.$this->base_folder.$tpl_name; 
     } else { 
      if (file_exists($this->context->smarty->getTemplateDir(1).$this->override_folder.$this->base_folder.$tpl_name)) { 
       $override_tpl_path = $this->context->smarty->getTemplateDir(1).$this->override_folder.$this->base_folder.$tpl_name; 
      } elseif (file_exists($this->context->smarty->getTemplateDir(0).'controllers'.DIRECTORY_SEPARATOR.$this->override_folder.$this->base_folder.$tpl_name)) { 
       $override_tpl_path = $this->context->smarty->getTemplateDir(0).'controllers'.DIRECTORY_SEPARATOR.$this->override_folder.$this->base_folder.$tpl_name; 
      } 
     } 
    } elseif ($this->module) { 
     $override_tpl_path = _PS_MODULE_DIR_.$this->module->name.'/views/templates/admin/_configure/'.$this->base_folder.$tpl_name; 
    } 

    if (isset($override_tpl_path) && file_exists($override_tpl_path)) { 
     return $this->context->smarty->createTemplate($override_tpl_path, $this->context->smarty); 
    } else { 
     return $this->context->smarty->createTemplate($this->base_folder.$tpl_name, $this->context->smarty); 
    } 
} 

あなたがこの方法で見ることができるように、あなたはこのファイル/modules/my_module/views/templates/admin/_configure/helpers/form/form.tplを作成して、モジュール内部のデフォルトの管理テンプレートを上書きする可能性があります。

{extends file="helpers/form/form.tpl"} 
{block name="input"} 
    {if $input.type == 'checkbox'} 
     {if isset($input.expand)} 
      <a class="btn btn-default show_checkbox{if strtolower($input.expand.default) == 'hide'} hidden{/if}" href="#"> 
       <i class="icon-{$input.expand.show.icon}"></i> 
       {$input.expand.show.text} 
       {if isset($input.expand.print_total) && $input.expand.print_total > 0} 
        <span class="badge">{$input.expand.print_total}</span> 
       {/if} 
      </a> 
      <a class="btn btn-default hide_checkbox{if strtolower($input.expand.default) == 'show'} hidden{/if}" href="#"> 
       <i class="icon-{$input.expand.hide.icon}"></i> 
       {$input.expand.hide.text} 
       {if isset($input.expand.print_total) && $input.expand.print_total > 0} 
        <span class="badge">{$input.expand.print_total}</span> 
       {/if} 
      </a> 
     {/if} 

     {* HERE WE DEFINE A CHECKBOX CHECK_ALL *} 
     <input type="checkbox" id="check_all" name="check_all" data-name="{$input.name}" value="1" /> 

     {foreach $input.values.query as $value} 
      {assign var=id_checkbox value=$input.name|cat:'_'|cat:$value[$input.values.id]} 

      {* HERE YOU CAN REARRANGE THE CHECKBOXES AS YOU WANT *} 
      <div class="checkbox{if isset($input.expand) && strtolower($input.expand.default) == 'show'} hidden{/if}"> 
       {strip} 
        <label for="{$id_checkbox}"> 
         <input type="checkbox" name="{$id_checkbox}" id="{$id_checkbox}" class="{if isset($input.class)}{$input.class}{/if}"{if isset($value.val)} value="{$value.val|escape:'html':'UTF-8'}"{/if}{if isset($fields_value[$id_checkbox]) && $fields_value[$id_checkbox]} checked="checked"{/if} /> 
         {$value[$input.values.name]} 
        </label> 
       {/strip} 
      </div> 
     {/foreach} 
    {else} 
     {$smarty.block.parent} 
    {/if} 
{/block} 

{* HERE WE DEFINE THE JAVASCRIPT THAT WILL ANIMATE THE CHECK ALL CHECKBOX *} 
<script type="text/javascript"> 
    $("#check_all").on('change', function() { 
     $("input[name=" + $(this).data('name') + "]").prop('checked', true); 
     $(this).prop('checked', false); 
    }); 
</script> 
は、

このテンプレートは、モジュールで定義されたすべての管理コントローラで使用されます。

私はこのコードをテストしませんでしたが、あなたのニーズに合わせる必要がありますが、全体のコンセプトはここにあります。

+0

管理者ページではなく、設定ページで使用します。それはそこに適用できるのですか? –

+0

モジュール設定ページは管理コントローラなので、動作するはずです。 –

関連する問題