示例#1
0
 /**
  * Get the widget instance.
  *
  * @param string $fieldName     The property name.
  *
  * @param string $serializedId  The serialized id of the model.
  *
  * @param string $propertyValue The property value.
  *
  * @return \Widget
  */
 protected function getWidget($fieldName, $serializedId, $propertyValue)
 {
     $environment = $this->getEnvironment();
     $property = $environment->getDataDefinition()->getPropertiesDefinition()->getProperty($fieldName);
     $propertyValues = new PropertyValueBag();
     if ($serializedId !== null) {
         $model = $this->getModelFromSerializedId($serializedId);
     } else {
         $dataProvider = $environment->getDataProvider();
         $model = $dataProvider->getEmptyModel();
     }
     $widgetManager = new ContaoWidgetManager($environment, $model);
     // Process input and update changed properties.
     $treeType = substr($property->getWidgetType(), 0, 4);
     $propertyValue = $this->getTreeValue($treeType, $propertyValue);
     if ($treeType == 'file' || $treeType == 'page') {
         $extra = $property->getExtra();
         if (is_array($propertyValue) && !isset($extra['multiple'])) {
             $propertyValue = $propertyValue[0];
         } else {
             $propertyValue = implode(',', (array) $propertyValue);
         }
     }
     $propertyValues->setPropertyValue($fieldName, $propertyValue);
     $widgetManager->processInput($propertyValues);
     $model->setProperty($fieldName, $propertyValues->getPropertyValue($fieldName));
     $widget = $widgetManager->getWidget($fieldName);
     return $widget;
 }
示例#2
0
 /**
  * Build all widgets.
  *
  * @return void
  */
 private function buildWidgets()
 {
     foreach ($this->getForms() as $form) {
         foreach ($form->getFields() as $field) {
             $this->widgets[$field->getName()] = $this->widgetManager->getWidget($field->getName(), $this->propertyValues);
         }
     }
 }