2015-11-25 11 views
1

Я работаю над расширением, чтобы заменить тип поля выбора радио/флажками в режиме Bolt cms. Моя проблема заключается в том, как использовать внутренние элементы болта для хранения выбранных значений.Как сохранить массив для расширения нового поля в Bolt cms

Ajax POST данные, когда я нажимаю сохранить:

day[]: Monday 
day[]: Friday 

Так это же, как и для отдельных полей.

Я после этого учебника: https://docs.bolt.cm/extensions/customfields и использовали

public function getStorageType(){ 
    return 'text'; 
} 

Реакция АЯКС-запрос на сохранение этого поля является массив, и это то, что попадает в базу данных. Интересные поля выбора в этом ответе не отображаются. Я не могу найти место, где данные полей выбора хранятся в приложении-коде.

Как правильно сохранить его в базе данных? Использование getStorageType 'json-array' приводит к неправильной схеме базы данных, которую болт не может решить.

Вы можете посмотреть на код здесь: https://github.com/osfriese/bolt-boxselect/tree/develope

Пожалуйста, помогите. Спасибо Tobi

ответ

0

Я нашел решение - более или менее.

К сожалению, это жестко закодировано в src/Content.php. Если вы хотите пользовательский fieltype Wich хранит массив значения вы должны изменить выберите случай функции GetValues ​​ к:

    default: 
         if (is_array($this->values[$field])) { 
          $newvalue[$field] = json_encode($this->values[$field]); 
         }else{ 
          $newvalue[$field] = $this->values[$field]; 
         } 
         break; 

И в setValues ​​ есть $ serializedFieldTypes = массив (...), где вы должны вручную добавить свой собственный тип поля.

К сожалению, это не практично для расширений. Но я обновляю свой github своим измененным Content.php для людей, которые хотят посмотреть.

Когда я искал решение, я рассмотрел много исходного кода основной ветви болта в github. Для версии 2.3 уровень хранилища полностью перестроен, и, как кажется, не потребуется никаких изменений, кроме. Поэтому, надеюсь, с версией> = 2.3 расширение будет работать из коробки.

Тем не менее getStorageType() просто влияет только на тип поля базы данных и болт просто принимает текст «здесь».

Надеюсь, что я смогу помочь некоторым людям, ответив на мой собственный вопрос.

Thanks Tobi