добавить пользовательское поле prestashop customer - PullRequest
0 голосов
/ 01 ноября 2018

Привет, я относительно новичок в prestashop и думаю, не может ли кто-нибудь направить меня в нужное место.

Обычно я добавляю новое настраиваемое поле на страницу create_account.

Я изначально пытался исправить проблему, но я знаю, что после обновления prestashop все изменения в основных файлах будут перезаписаны.

Я начал вносить изменения в AdminCustomerController.php как показано ниже. (Также поле, которое я пытаюсь добавить, это Природа бизнеса)

class AdminCustomersController extends AdminCustomersControllerCore {

    public function renderForm($id = null)
    {

        $this->fields_form = array(
            'legend' => array(
                'title' => $this->trans('Customer', array(), 'Admin.Global'),
                'icon' => 'icon-user'
            ),
            'input' => array(
                array(
                    'type' => 'text',
                    'prefix' => '',
                    'label' => $this->trans('Practice', array(), 'Admin.Global'),
                    'name' => 'practice',
                    'col' => '4',
                    'autocomplete' => false
                ),
                array(
                    'type' => 'text',
                    'label' => $this->trans('Nature of Business', array(), 'Admin.Global'),
                    'name' => 'nature_enquiry',
                    'col' => '4',
                ),



            )
        );

        return parent::renderForm();
    }
}

Также отредактировал файл Customer.php в папке переопределения. как показано ниже:

class Customer extends CustomerCore {

    public $practice_from;

    /** nature of enquiry */
    public $nature_enquiry;

    protected  $definition = array(
        'table' => 'customer',
        'primary' => 'id_customer',
        'fields' => array(
         'nature_enquiry' => array('type' => self::TYPE_HTML, 'validate' => 'isCleanHtml', 'required'=>false,'size' => 65000),

        ),
    );

    public function __construct($id = null)
    {
        parent::__construct($id);
        parent::$definition['practice_from'] = ['type' => parent::TYPE_STRING];
    }
}

наконец добавил мое новое поле в классы / Customer.php внизу массива определений, как показано ниже:

public static $definition = array(
    'table' => 'customer',
    'primary' => 'id_customer',
    'fields' => array(
        'secure_key' => array('type' => self::TYPE_STRING, 'validate' => 'isMd5', 'copy_post' => false),
        'lastname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 255),
        'firstname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 255),
        'email' => array('type' => self::TYPE_STRING, 'validate' => 'isEmail', 'required' => true, 'size' => 128),
        'passwd' => array('type' => self::TYPE_STRING, 'validate' => 'isPasswd', 'required' => true, 'size' => 60),
        'last_passwd_gen' => array('type' => self::TYPE_STRING, 'copy_post' => false),
        'id_gender' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
        'birthday' => array('type' => self::TYPE_DATE, 'validate' => 'isBirthDate'),
        'newsletter' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
        'newsletter_date_add' => array('type' => self::TYPE_DATE, 'copy_post' => false),
        'ip_registration_newsletter' => array('type' => self::TYPE_STRING, 'copy_post' => false),
        'optin' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
        'website' => array('type' => self::TYPE_STRING, 'validate' => 'isUrl'),
        'company' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName'),
        'siret' => array('type' => self::TYPE_STRING, 'validate' => 'isSiret'),
        'ape' => array('type' => self::TYPE_STRING, 'validate' => 'isApe'),
        'outstanding_allow_amount' => array('type' => self::TYPE_FLOAT, 'validate' => 'isFloat', 'copy_post' => false),
        'show_public_prices' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_post' => false),
        'id_risk' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt', 'copy_post' => false),
        'max_payment_days' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt', 'copy_post' => false),
        'active' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_post' => false),
        'deleted' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_post' => false),
        'note' => array('type' => self::TYPE_HTML, 'validate' => 'isCleanHtml', 'size' => 65000, 'copy_post' => false),
        'is_guest' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_post' => false),
        'id_shop' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'copy_post' => false),
        'id_shop_group' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'copy_post' => false),
        'id_default_group' => array('type' => self::TYPE_INT, 'copy_post' => false),
        'id_lang' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'copy_post' => false),
        'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate', 'copy_post' => false),
        'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate', 'copy_post' => false),
        'reset_password_token' => array('type' => self::TYPE_STRING, 'validate' => 'isSha1', 'size' => 40, 'copy_post' => false),
        'reset_password_validity' => array('type' => self::TYPE_DATE, 'validate' => 'isDateOrNull', 'copy_post' => false),
        'nature_enquiry' => array('type' => self::TYPE_HTML, 'validate' => 'isCleanHtml', 'required'=>false,'size' => 65000),

    ),
);

классы / форма / CustomerFormatter.php

$format['nature_enquiry'] = (new FormField)
    ->setName('nature_enquiry')
    ->setLabel(
        $this->translator->trans(
            'Nature of Business', [], 'Shop.Forms.Labels'
        )
    );

В идеале я хотел знать, что что-то пропустил, чтобы заставить это работать на живом сайте.

или любую документацию для добавления настраиваемого поля в форму регистрации.

PrestaShop - 1.7.0.6

Спасибо

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Вы должны избегать редактирования основных кодов. переопределения тоже не рекомендуется. Вы должны попытаться создать модуль.

Вы можете использовать следующие хуки в вашем модуле:

public function hookAdditionalCustomerFormFields($params)
{
    //return html of your field
}

public function hookActionSubmitAccountBefore($params)
{
    //process your field posted data
}


public function hookActionAdminCustomersListingFieldsModifier($params)
{
    //show your filed in admin customers list
    $params['fields']['your_new_field'] = array(
        'title' => $this->l('label'),
        'align' => 'center',
    );
}

public function hookActionAdminCustomersFormModifier($params)
{
    dd($params);
    //add your fields
}
0 голосов
/ 01 ноября 2018

Не смотрел подробно на ваши изменения, но на первый взгляд они выглядят солидно. Чтобы сохранить эти изменения при обновлении, вам необходимо «переопределить» эти файлы. См. официальные документы по переопределениям . В основном он состоит из создания соответствующих файлов в каталоге [prestashop_root_dir]/overrides и переписывания методов, которые вы хотите изменить.

Вам также необходимо удалить [prestashop_root_dir]/app/cache/pro/class_index.php, чтобы переопределенные файлы загружались.

...