示例#1
0
 /**
  * Определяем массив опций и дергаем родительский конструктор
  *
  * @param mixed $spec
  * @param array $options
  */
 public function __construct($spec, $options = null)
 {
     $this->translate = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('Translate');
     /**
      * Выделяем дополнительные элементы в отдельную форму и рендерим ее
      */
     require_once 'Phorm/Form.php';
     if (isset($options['elements']) && is_array($options['elements'])) {
         $config = array('elements' => $options['elements']);
         if (isset($options['paths']['prefixPath'])) {
             $config['prefixPath'] = array_values($options['paths']['prefixPath']);
         }
         if (isset($options['paths']['elementPrefixPath'])) {
             $config['elementPrefixPath'] = array_values($options['paths']['elementPrefixPath']);
         }
         /*foreach ($options as $key=>$option) {
         			if(!in_array($key,array('elements','prefixPath','elementPrefixPath'))) {
         				unset($options[$key]);
         			}
         		}*/
         $form = new Phorm_Form(null, null, $config);
         $form->removeDecorator('Form');
         $form->removeDecorator('DtDdWrapper');
         $form->setElementsBelongTo($spec . '[]');
         $this->renderform = $form->render() . '<div class="clear"></div>';
         unset($options['elements'], $config['elements']);
         foreach ($form->getElements() as $element) {
             $element->setAttrib('id', null);
         }
         $this->form = $form;
     }
     /**
      * Инициализируем родительский конструктор
      */
     parent::__construct($spec, $options);
 }
示例#2
0
文件: Widget.php 项目: ei-grad/phorm
 /**
  * Возвращает форму добавления/редактирования виджета
  *
  * @param string $section Секция xml-файла
  * @param array $TypeInfo Массив данных о типе виджета (для расширения формы)
  * @return Phorm_Form
  */
 public function getWidgetForm($section = 'add', $TypeInfo = array())
 {
     /**
      * Расширяем базовую форму формой виджета через аналогичную секцию (add или edit)
      */
     $files = array('forms/control/widgets.xml');
     if (!empty($TypeInfo)) {
         $files[] = 'widgets/' . $TypeInfo['template'] . '/' . $TypeInfo['context'] . '.xml';
     }
     /**
      * Инициализируем объект формы
      */
     $form = new Phorm_Form($files, $section);
     /**
      * Добавляем валидацию на тип элемента CategoriesMultiSelect
      */
     foreach ($form->getElements() as $element) {
         if ($element->getType() == 'Phorm_Form_Element_CategoriesMultiSelect') {
             $haystack = $element->getMultiOptions();
             foreach ($haystack as $key => $val) {
                 $haystack[$key] = is_array($val) ? $val['categoryid'] : $key;
             }
             $element->addValidator("InArray", true, array("haystack" => $haystack));
             continue;
         }
     }
     /**
      * Добавляем данные для элементов формы
      */
     if (isset($form->typeid)) {
         $form->typeid->options = array(0 => $this->_translate->_('---Выберите---')) + $this->getWidgetsTypes();
     }
     if (isset($form->acl)) {
         $form->acl->options = $this->getRolesList();
     }
     return $form;
 }
示例#3
0
 /**
  * Возвращает форму создания/редактирования раздела
  *
  * @param int $categoryid Id текущего раздела 
  * @param string $section Секция формы (add | edit)
  * @return Phorm_Form
  */
 public function getCategoryForm($categoryid, $section = 'add')
 {
     $form = new Phorm_Form('forms/control/categories.xml', $section);
     /**
      * Добавляем справочники на элементы
      */
     foreach ($form->getElements() as $element) {
         $elementname = $element->getName();
         switch ($elementname) {
             case 'moduleid':
                 /**
                  * Список модулей
                  */
                 // Используйте тип элемента Modules где список модулей накидывается внутри элемента
                 break;
             case 'insertbefore':
                 /**
                  * Список братьев или детей и позиция относительно них
                  */
                 $Categories = $section == 'add' ? $this->getChilds($categoryid) : $this->getBrothers($categoryid);
                 foreach ($Categories as $key => $category) {
                     if ($category['categoryid'] == $categoryid) {
                         if (key_exists($key + 1, $Categories)) {
                             $element->setValue($Categories[$key + 1]['categoryid']);
                         }
                         continue;
                     }
                     $element->addMultiOption($category['categoryid'], $this->_translate->_('Перед') . ' «' . $category['categoryname'] . '»');
                 }
                 $element->addMultiOption(0, $this->_translate->_('В конце'));
                 if (!$element->getValue()) {
                     $element->setValue(0);
                 }
                 break;
             case 'depends':
                 /**
                  * Связанные разделы
                  */
                 // Используйте тип элемента Categories где список разделов накидывается внутри элемента
                 break;
             case 'realcategoryid':
                 /**
                  * Раздел для замещения
                  */
                 // Используйте тип элемента Categories где список разделов накидывается внутри элемента
                 break;
             case 'categorypath':
                 /**
                  * Путь раздела
                  */
                 /*if($CategoryInfo = $this->getCategoryInfo($categoryid)) {
                 			$element->setLabel($element->getLabel() . ' (' . $CategoryInfo['fullpath'] . ')');
                 		}*/
                 break;
         }
     }
     return $form;
 }