добавить пользовательское поле prestashop customer

добавить пользовательское поле prestashop customer

01.11.2018 01:29:22 Просмотров 66 Источник

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

В принципе, я после добавления нового пользовательского поля на страницу create_account.

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

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

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();
    }
}

Также редактировал клиент.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.РНР

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

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

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

Тема - 1.7.0.6

Спасибо

У вопроса есть решение - Посмотреть?

Ответы - добавить пользовательское поле prestashop customer / add custom field prestashop customer

defuzed

01.11.2018 04:58:27

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

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

Danoosh

04.11.2018 02:13:47

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

Вы можете использовать эти крючки в своем модуле:

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
}
Закрыть X