添加新的产品字段Prestashop 1.5

时间:2012-08-24 08:09:09

标签: prestashop

如何在PRESTASHOP 1.5上以编程方式添加新产品字段?

我在SQL上创建了这些字段,但我不知道如何保存它?

字段为3 bool,我想将其保存在单选按钮选项中。

3 个答案:

答案 0 :(得分:5)

您应该查看Product.php和ObjectModel.php,它们对应于Product类和ObjectModel类。

如果要在Product中添加字段,则必须在类中添加属性,并通过添加所添加属性的定义来更新类中的$ definition变量。

关于单选按钮,它是控制器的一部分,请看一下AdminProductsController.php

希望它有所帮助,

BR,

答案 1 :(得分:0)

Mayby你会使用模块托盘添加新字段吗? (这只是为了举例)

如果您在数据库中创建了字段(在我的示例中,我使用表“product_lang”)。

当你拥有skieleton模块时:

在models /

中创建“ProductField.php”
<?php

class ProductField extends ObjectModel
{
/** @var string Name */
public $id_product_field;

/** @var integer */
public $id_product;

/** @var string */
public $new_field;

/**
 * @see ObjectModel::$definition
 */
public static $definition = array(
    'table' => 'product_lang',
    'primary' => 'id_product',
    'multilang' => false,
    'fields' => array(
        'id_product' => array('type' => self::TYPE_INT, 'validate' => 'isInt', 'required' => TRUE),
        'new_field' => array('type' => self::TYPE_STRING, 'validate' => 'isString'),
    ),
);

public function __construct($ID_PRODUCT) {
    $result = Db::getInstance()->getRow('SELECT * FROM '._DB_PREFIX_.'product_lang WHERE id_product = '. (int) $ID_PRODUCT );
    $this->id_product = $ID_PRODUCT;
    $this->new_field = $result['new_field'];
}

public function update() {
    Db::getInstance()->update( 'product_lang', array( 'new_field' => $this->new_field ),  'id_product = ' . $this->id_product );
}

}
?>

记住在主要文件中包含模型。

在模块的主文件中添加方法:

public function hookDisplayAdminProductsExtra($params) {
$Fields = new ProductField( Tools::getValue('id_product') );
if( !empty( $Fields ) && isset( $Fields->id_product ) ) {
    $this->context->smarty->assign(array(
        'new_field' => $Fields->new_field,
    ) );
}
return $this->display(__FILE__, 'views/admin/admin.tpl');
}

创建视图/ admin / admin.tpl

<!-- New Field MODULE -->
<input type="hidden" name="submitted_tabs[]" value="productfields" />
<h4>{l s='Additional Fields' mod='productfields'}</h4>
<div class="separation"></div>
<fieldset style="border:none;">
    <table cellspacing="0" cellpadding="5" border="0">
        <tbody>
        <tr>
            <td class="col-left">
                <label>{l s='New field' mod='productfields'}<br></label>
                <p class="product_description">{l s='description of new field' mod='productfields'}</p>
            </td>
            <td style="padding-bottom:5px;">
                <input type="text" name="new_field" value="{if isset($new_field)}{$new_field}{/if}" />
            </td>
        <tr>
        </tbody>
    </table>
</fieldset>
<div class="separation"></div>
<!-- END New Field MODULE -->

我希望不会忘记任何事情。仅适合您的需求。

答案 2 :(得分:0)

看看这里:https://gist.github.com/kpodemski/21a37617b6b488590dc1

这是来自PrestaShop 1.5.4的示例,但如果您下载1.5.6并将informations.tpl更改为更新版本,它应该可以正常工作。