Prestashop 的back office tab 筆記 - part 3

上一篇筆記成功地建立了一個最基本的檢視頁面,這一次就為admin tab 加入最基本的新增功能吧 (由於prestashop 最近升級了版本, 筆記part 1 至 3, 只適用於1.4.9)

sample code:
 function displayForm(){   
    global $currentIndex;
    $defaultLanguage = intval(Configuration::get('PS_LANG_DEFAULT'));
    $languages = Language::getLanguages();
   
    $obj = $this->loadObject(true);
   
    echo '
        <script type="text/javascript">
            id_language = Number('.$defaultLanguage.');
        </script>';

    echo '
        <form action="' . $currentIndex . '&submitAdd' .  $this->table . '=1&token=' . $this->token . '" method="post" class="width3">
            ' . ($obj->id ? '<input type="hidden" name="id_' . $this->table . '" value="' . $obj->id . '" />' : '').'
            <fieldset><legend><img src="../img/admin/profiles.png" />' . $this->l('Admin Test') . '</legend>
            <label>'.$this->l('Name:').' </label>
            <div class="margin-form">';       
   
    foreach ( $languages as $language )
        echo '
            <div id="test_' . $language['id_lang'|'id_lang'] . '" style="display: ' . ($language['id_lang'|'id_lang'] == $defaultLanguage ? 'block' : 'none') . '; float: left;">
                <input size="33" type="text" name="name_' . $language['id_lang'|'id_lang'] . '" value="' . htmlentities( $this->getFieldValue( $obj, 'name', intval( $language['id_lang'|'id_lang'] ) ), ENT_COMPAT, 'UTF-8' ) . '" /><sup>*</sup>
                <span class="hint" name="help_box">'.$this->l('Allowed characters: letters, spaces and').' ().-<span class="hint-pointer">&nbsp;</span></span>
            </div>';
   
    $this->displayFlags( $languages, $defaultLanguage, 'test', 'test' );
   
    echo '<div class="clear"></div></div>';                 
    echo '<label>'.$this->l('Description:').' </label>
            <div class="margin-form">
            <textarea name="description" rows="10" cols="100">'.htmlentities( $this->getFieldValue( $obj, 'description'), ENT_COMPAT, 'UTF-8' ).'</textarea>';
    echo '<div class="clear"></div></div>
            <div class="margin-form">
            <input type="submit" value="'.$this->l('Save').'" name="submitAdd'.$this->table.'" class="button" />
            </div>
            <div class="small"><sup>*</sup> '.$this->l('Required field').'</div>
        </fieldset>
        </form> ';       
}

要在按下新增或修改時出現form, 我地需要overwrite displayForm, 係入面設定我地需要的form elements, 而form 入面最重要的當然係張form 的action link同入面d parameters, 因為perstashop 原本的class 只會認指定了的名同parameter, 如果你的唔同了而你又沒有為自己新定的action加上code, 它可是不會作出對應的動作呢,所以基本上這一個form 的tag 是不用作出什麼改變的

echo '<form action="' . $currentIndex . '&submitAdd' .  $this->table . '=1&token=' . $this->token . '" method="post" class="width3">

而其他的則只需好似平時普通的html form 一樣,如果想為到張form 加回由db的值就要用上
// fields 為非多語言support時
$this->getFieldValue( $obj, 'description')

// fields 為多語言support時
$this->getFieldValue( $obj, 'name', intval( $language['id_lang'|'id_lang'] ) )

以上就可以為到prestashop 設定最basic的一個admin tab,不過由於prestashop出了新版而且也把admin的一部份也改成了controller,寫法上也有些改變,所以這筆記只可以應用在1.4.9版本中呢!

0 回應:

Post a Comment