Prestashop PHP поля формы установить значение в раскрывающемся списке

У меня есть форма, созданная из php с FormField, и у меня есть поле страны, которое содержит список стран. У меня вопрос, как я могу установить страну, которая будет выбрана, из php, а не из HTML-шаблонов (потому что это создается как {form_field field=$field} в файле tpl).

Вот мой код:

$countries = Country::getCountries($this->context->language->id);
    $format['country'] = (new FormField)
        ->setName('country')
        ->setType('countrySelect')
        ->setLabel(
            $this->translator->trans(
                'Country', [], 'Shop.Forms.Labels'
            )
        )
        ->setRequired(true)
    ;

    foreach ($countries as $country) {
        $format['country']->addAvailableValue(
            $country['id_country'],
            $country['country']
        );
    }

Если бы я мог установить его из php, это было бы здорово, потому что я не хочу менять файлы ядра или что-то в этом роде. Заранее спасибо.

0 ответов

class XXXFormatter extends XXXCore
{
private $country = 666;// 666 = preselected country by id
...
}

или

class XXXFormatter extends XXXCore
{
private $country = (int) Tools::getValue('id_country');
...
  public function getFormat()
  {
   ...
   if($this->country == 666)
   {
    $format['country'] = (new FormField())
        ->setName('id_country')
        ->setType('hidden')
        ->setValue($this->country);
   }
   else
   {
          $countries = Country::getCountries($this->language->id,true);
            $format['country'] = (new FormField())
                ->setName('country')
                ->setType('countrySelect')
                ->setLabel($this->translator->trans('Country', [], 'Shop.Forms.Labels'))
                ->setRequired($this->country_is_required)
                ->setValue($this->country);
                foreach ($countries as $country) {
                    $format['country']->addAvailableValue(
                        $country['id_country'],
                        $country['name']);
                }
   }
   ...
  }
}

Теперь, если вы планируете установить относительное необходимое значение, вам нужно сделать частную переменную внутри класса:

              $countries = Country::getCountries($this->language->id,true);
                $format['country'] = (new FormField())
                    ->setName('country')
                    ->setType('countrySelect')
                    ->setLabel($this->translator->trans('Country', [], 'Shop.Forms.Labels'))
                    ->setRequired($this->country_is_required)
                    ->setValue($this->country);
                    foreach ($countries as $country) {
                        $format['country']->addAvailableValue(
                            $country['id_country'],
                            $country['name']);
                    }

или установите другую частную переменную:

          $countries = Country::getCountries($this->language->id,true);
            $format['country'] = (new FormField())
                ->setName('country')
                ->setType('countrySelect')
                ->setLabel($this->translator->trans('Country', [], 'Shop.Forms.Labels'))
                ->setRequired($this->password_is_required)
                ->setValue($this->country);
                foreach ($countries as $country) {
                    $format['country']->addAvailableValue(
                        $country['id_country'],
                        $country['name']);
                }

(new FormField)->setValue ($value) должен сделать свою работу, проверьте classes/form/FormField.php

public function setValue($value)
Другие вопросы по тегам