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)