Prestashop 1.5.6 - 在管理产品页面

时间:2016-01-04 21:30:30

标签: prestashop http-status-code-403 prestashop-1.5

我一直在尝试在管理产品页面中引入新的自定义字段,但出现了一个奇怪的错误。实际上,该字段具有与现有字段相同的文本区域类型。 如果我输入纯文本,它可以正常工作但是如果我输入以开始尖括号(<)开头的任何内容,它会给我一个403禁止错误。我已经检查了文件夹和文件的权限。

这就是我所做的。

  1. 新的db字段 enter image description here

  2. ProductCore类。在任何地方进行修改'描述'被引用是因为它们几乎是一样的。 enter image description here

  3. 修改了Information.tpl以显示此新字段。

  4. 这是管理产品页面在更改后的样子。如您所见,可以保存纯文本而不会出现任何问题。 enter image description here

  5. 如果我输入任何以尖括号开头的html标签,然后保存,我会收到403错误,而屏幕上现有的textarea(例如Description)则完全正常。 enter image description here

  6. enter image description here

    我已检查过文件和文件夹以及错误日志的权限,但无法找到任何线索。有人有个主意吗?请帮忙!

    information.tpl

            <tr>
                <td class="col-left">
                    {include file="controllers/products/multishop/checkbox.tpl" field="description" type="tinymce" multilang="true"}
                    <label>{l s='Description:'}<br /></label>
                    <p class="product_description">({l s='Appears in the body of the product page'})</p>
                </td>
                <td style="padding-bottom:5px;">
                        {include file="controllers/products/textarea_lang.tpl" languages=$languages
                        input_name='description'
                        input_value=$product->description
                        }
                    <p class="clear"></p>
                </td>
            </tr>
            <tr>
                <td class="col-left">
                    {include file="controllers/products/multishop/checkbox.tpl" field="alternate_item" type="tinymce" multilang="true"}
                    <label>{l s='Alternate Item:'}<br /></label>
                </td>
                <td style="padding-bottom:5px;">
                        {include file="controllers/products/textarea_lang.tpl"
                        languages=$languages
                        input_name='alternate_item'
                        input_value=$product->alternate_item}
                    <p class="clear"></p>
                </td>
            </tr>
    

    textarea_lang.tpl

    <div class="translatable">
    {foreach from=$languages item=language}
    <div class="lang_{$language.id_lang}" style="{if !$language.is_default}display:none;{/if}float: left;">
        <textarea cols="100" rows="10" id="{$input_name}_{$language.id_lang}" 
            name="{$input_name}_{$language.id_lang}" 
            class="autoload_rte" >{if isset($input_value[$language.id_lang])}{$input_value[$language.id_lang]|htmlentitiesUTF8}{/if}</textarea>
        <span class="counter" max="{if isset($max)}{$max}{else}none{/if}"></span>
        <span class="hint">{$hint|default:''}<span class="hint-pointer">&nbsp;</span></span>
    </div>
    {/foreach}
    </div>
    <script type="text/javascript">
        var iso = '{$iso_tiny_mce}';
        var pathCSS = '{$smarty.const._THEME_CSS_DIR_}';
        var ad = '{$ad}';
    </script>
    

1 个答案:

答案 0 :(得分:0)

您必须覆盖ProductCore类,不要修改ProductCore类

class Product extends ProductCore 
{
   public $alternate_item;

   public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
   {
         self::$definition['fields']['alternate_item'] = array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml');
         parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
   }
}

覆盖类必须放在覆盖/类文件夹或 yourmodule / override / classes

当您覆盖某个类时,您必须删除 cache / class_index.php