如何将类型添加到opencart中的自定义字段?

how to add type to custom field in opencart?

我想在 opencart 2.0.3.1 的注册表中添加代码 ID,但在管理面板中只能选择

this type---> ( choose, choose File, Date) , my type of field is "int" and "unique" and "its Length"is 10 ?

我该怎么做?

Opencart 中的自定义字段没有验证功能,因此如果您需要验证,您必须手动添加所需的字段。

我创建了一个 vqmod 脚本,它添加了一个具有类型和长度验证的新字段(它必须是恰好 10 位数字的数字),该脚本添加了新列 code_melli UNIQE 防止存储重复条目的索引。

由于问题是关于注册表单的,这个脚本只准备了这个表单,如果你想让你的客户从他们的帐户编辑它或者在管理面板中回显它,你必须改进它。

我已经在 Opencart 2.0.3.1 上使用默认主题对此进行了测试:

<?xml version="1.0" encoding="UTF-8"?>
<modification>
    <id>Code Melli</id>
    <version>2.0.3.1</version>
    <vqmver>2.6.0</vqmver>
    <author>darbaze.com</author>

    <file name="catalog/model/account/customer.php">
        <operation error="skip">
            <search position="after"><![CDATA[extends Model {]]></search>
            <add><![CDATA[
                public function checkCodeMelli() {
                    $hasCodeMelli = false;
                    $result = $this->db->query( "DESCRIBE " . DB_PREFIX . "customer");
                    foreach ($result->rows as $row) {
                        if ($row['Field'] == 'code_melli') {
                            $hasCodeMelli = true;
                            break;
                        }
                    }
                    if (!$hasCodeMelli) {
                        $sql = "ALTER TABLE `" . DB_PREFIX . "customer` ADD `code_melli` INT(10) NULL  AFTER `lastname`,  ADD   UNIQUE  (`code_melli`) ;";

                        $this->db->query( $sql );
                    }
                }

                public function getTotalCustomersByCodeMelli($code_melli) {
                    $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "customer WHERE code_melli = '" . (int)$code_melli . "'");

                    return $query->row['total'];
                }
            ]]></add>
        </operation>
        <operation error="skip">
            <search position="iafter"><![CDATA[email = '" . $this->db->escape($data['email']) . "',]]></search>
            <add><![CDATA[code_melli = '" . $this->db->escape($data['code_melli']) . "',]]></add>
        </operation>
    </file>

    <file name="catalog/controller/account/register.php">
        <operation error="skip">
            <search position="after"><![CDATA[$this->load->model('account/customer');]]></search>
            <add><![CDATA[
                $this->model_account_customer->checkCodeMelli();
            ]]></add>
        </operation>
        <operation error="skip">
            <search position="before"><![CDATA[if (isset($this->error['email'])) {]]></search>
            <add><![CDATA[
                if (isset($this->error['code_melli'])) {
                    $data['error_code_melli'] = $this->error['code_melli'];
                } else {
                    $data['error_code_melli'] = '';
                }
            ]]></add>
        </operation>
        <operation error="skip">
            <search position="before"><![CDATA[if (isset($this->request->post['email'])) {]]></search>
            <add><![CDATA[
                if (isset($this->request->post['code_melli'])) {
                    $data['code_melli'] = $this->request->post['code_melli'];
                } else {
                    $data['code_melli'] = '';
                }
            ]]></add>
        </operation>
        <operation error="skip">
            <search position="after"><![CDATA[function validate() {]]></search>
            <add><![CDATA[
                if (!is_numeric($this->request->post['code_melli']) || (utf8_strlen(trim($this->request->post['code_melli'])) != 10)) {
                    $this->error['code_melli'] = 'کد ملی به درستی وارد نشده است';
                }
                if ($this->model_account_customer->getTotalCustomersByCodeMelli($this->request->post['code_melli'])) {
                    $this->error['warning'] = 'این کد ملی قبلا ثبت شده است';
                }
            ]]></add>
        </operation>
    </file>

    <file name="catalog/view/theme/*/template/account/register.tpl">
        <operation error="skip">
            <search position="before" index="1" offset="1"><![CDATA[<?php echo $entry_email; ?>]]></search>
            <add><![CDATA[
              <div class="form-group required">
                <label class="col-sm-2 control-label" for="input-code_melli">کد ملی</label>
                <div class="col-sm-10">
                  <input type="code_melli" name="code_melli" value="<?php echo $code_melli; ?>" placeholder="کد ملی" id="input-code_melli" class="form-control" />
                  <?php if ($error_code_melli) { ?>
                  <div class="text-danger"><?php echo $error_code_melli; ?></div>
                  <?php } ?>
                </div>
              </div>
            ]]></add>
        </operation>
    </file>

</modification>