在注册表单 Prestashop 1 中显示自定义字段。6.x

Display custom fields in registration form Prestashop 1.6.x

我在 Ps 1.6 中添加了一个模块。创建电子发票。该模块在注册表单中添加了两个字段,但我无法从数据库中获取和更新数据。

下面是一些片段。 首先我创建 table:

    $sqlInstallCod = 'ALTER TABLE ' ._DB_PREFIX_.'customer ADD codice_destinatario VARCHAR(255) DEFAULT NULL';

    Db::getInstance()->execute($sqlInstallCod);
    $sqlInstallPec = 'ALTER TABLE ' ._DB_PREFIX_.'customer ADD pec VARCHAR(255) DEFAULT NULL';

    Db::getInstance()->execute($sqlInstallPec);

然后我尝试通过以下函数在我的注册表单中呈现数据:

public function hookDisplayCustomerAccountForm($params){
$query = 'SELECT codice_destinatario FROM '._DB_PREFIX_.'customer WHERE id_customer=\'' . $params['id_customer']. '\';';


$this->context->smarty->assign('codice_destinatario', '');
$this->context->smarty->assign('pec', '');
return $this->display(__FILE__, 'hookDisplayCustomerAccountForm.tpl');
} 

public function hookDisplayCustomerIdentityForm($params){
$query = 'SELECT codice_destinatario FROM '._DB_PREFIX_.'customer WHERE id_customer=\'' . $order_id . '\';';

$this->trace("id_customer",$params['id_customer']);

$query = 'SELECT codice_destinatario FROM >'._DB_PREFIX_.'customer WHERE id_customer=\'' . $params['id_customer']. '\';';


$this->context->smarty->assign('codice_destinatario', '');
$this->context->smarty->assign('pec', '');

return $this->display(__FILE__, 'hookDisplayCustomerAccountForm.tpl');
} 

其实数据保存在正确的table但是前端既没有显示也没有更新

我想我也需要更改我的 hookDisplayCustomerAccountForm.tpl 文件。我尝试这样做:

<div class="form-group">
    <label for="codice_destinatario">{l s='Codice Destinatario' mod='fattura24'}</label>
    <input class="form-control" name="codice_destinatario" type="text" id="codice_destinatario" value="{if isset($smarty.post.codice_destinatario)}{$smarty.post.codice_destinatario|escape:'htmlall':'UTF-8'}{/if}"/>
</div>
<div class="form-group">
    <label for="pec">{l s='PEC' mod='fattura24'}</label>
    <input class="form-control" name="pec" type="text" id="pec" value="{if isset($smarty.post.pec)}{$smarty.post.pec|escape:'htmlall':'UTF-8'}{/if}"/>
</div>

没用。有什么建议么? 非常感谢 大卫

终于找到解决办法了。首先,我通过以下代码安装一个新的 table:

$sql = array();
    $sql[] = 'CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'fattura24` (
        `id_fattura24` int(11) NOT NULL AUTO_INCREMENT,
        `id_customer` int(11),
        `fattura24_codice_destinatario` varchar(13),
        `fattura24_pec` varchar(60),
        PRIMARY KEY  (`id_fattura24`)
    ) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=utf8;';

    foreach ($sql as $query) {
        if (Db::getInstance()->execute($query) == false) {
    return false;
        }
    }

然后我为要在其中显示字段的每个操作创建一个挂钩和一个模板。在示例中,您将看到 DisplayCustomerIdentityForm:

public function hookDisplayCustomerIdentityForm($params){

    $sdi_code = Tools::getValue('fattura24_codice_destinatario');
    if (!$sdi_code or strlen($sdi_code) <= 1)
    {
        $sdi_code = '0000000';    
    }

    if (Tools::getValue('id_fattura24')>0)
    {
    $sql = "update `"._DB_PREFIX_."fattura24` set fattura24_codice_destinatario = '".pSQL($sdi_code)."',fattura24_pec='".pSQL(Tools::getValue('fattura24_pec'))."'
    where id_fattura24 = ".(int)Tools::getValue('id_fattura24')." "; 
               Db::getInstance()->Execute($sql);
    } elseif (Tools::getValue('fattura24_id_customer')) {
    $sql = "INSERT INTO `"._DB_PREFIX_."fattura24`(id_customer,fattura24_codice_destinatario,fattura24_pec) 
               VALUES (".pSQL(Tools::getValue('fattura24_id_customer')).",'".pSQL($sdi_code)."','".pSQL(Tools::getValue('fattura24_pec'))."')";
               Db::getInstance()->Execute($sql);
    }
    if ($params['cookie']->id_customer)
    {
        $sql = "select id_fattura24,fattura24_codice_destinatario,fattura24_pec from `"._DB_PREFIX_."fattura24` where id_customer = ".$params['cookie']->id_customer."";
        $result = Db::getInstance()->getRow($sql);
    }
    $this->context->smarty->assign('id_fattura24', $result['id_fattura24']);
    $this->context->smarty->assign('fattura24_id_customer', $params['cookie']->id_customer);
    $this->context->smarty->assign('fattura24_codice_destinatario', $result['fattura24_codice_destinatario']);
    $this->context->smarty->assign('fattura24_pec', $result['fattura24_pec']);
    return $this->display(__FILE__, 'views/templates/hook/customer_reg_form.tpl');
}    

记住你必须注册钩子:

 if (!parent::install()
    . . .

 || !$this->registerHook('displayCustomerIdentityForm')
    . . .

 return false;

最后,让我们展示 customer_reg_form.tpl:

<input type="hidden" name="id_fattura24" value="{if isset($id_fattura24)}{$id_fattura24}{else}{/if}">
<input type="hidden" name="fattura24_id_customer" value="{$fattura24_id_customer}">
<div class="form-group row">
    <label>{l s='Indirizzo PEC' mod='fattura24'}</label>
    <div>
        <input type="email" name="fattura24_pec" value="{if isset($smarty.post.fattura24_pec)}{$smarty.post.fattura24_pec}{else}{$fattura24_pec}{/if}"/>
    </div>
</div>
<div class="form-group row">

    <label>{l s='Codice Destinatario' mod='fattura24'}</label>
    <div>
        <input type="text" maxlength="7" name="fattura24_codice_destinatario" value="{if isset($smarty.post.fattura24_codice_destinatario)}{$smarty.post.fattura24_codice_destinatario}{else}{$fattura24_codice_destinatario}{/if}"/>
    </div>
</div>