/** * 2015-11-28 * @param AE|E $e * @param string $class [optional] * @param string|string[] $css [optional] * @param array(string => string) $params [optional] * @param string|null $path [optional] * @return void */ function df_fe_init(AE $e, $class = '', $css = [], $params = [], $path = null) { $class = $class ?: get_class($e); /** @var string $moduleName */ $moduleName = df_module_name($class); // 2015-12-29 // Мы различаем ситуации, когда $path равно null и пустой строке. // *) null означает, что имя ресурса должно определяться по имени класса. // *) пустая строка означает, что ресурс не имеет префикса, т.е. его имя просто «main». if (is_null($path)) { /** @var string[] $classA */ $classA = df_explode_class_lc($class); $classLast = array_pop($classA); switch ($classLast) { // Если имя класса заканчивается на FormElement, // то это окончание в пути к ресурсу отбрасываем. case 'formElement': // $path будет равно null break; // Если имя класса заканчивается на Element, // то в качестве пути к ресурсу используем предыдущую часть класса. // Пример: «Dfe\SalesSequence\Config\Matrix\Element» => «matrix» // Если имя класса заканчивается на Element, // то в качестве пути к ресурсу используем предыдущую часть класса. // Пример: «Dfe\SalesSequence\Config\Matrix\Element» => «matrix» case 'element': $path = array_pop($classA); break; default: $path = $classLast; } } // 2015-12-29 // Используем df_ccc, чтобы отбросить $path, равный пустой строке. // Если имя класса заканчивается на FormElement, то это окончание в пути к ресурсу отбрасываем. $path = df_ccc('/', 'formElement', $path, 'main'); /** * 2015-12-29 * На практике заметил, что основной файл CSS используется почти всегда, * и его имя имеет формат: Df_Framework::formElement/color/main.css. * Добавляем его обязательно в конец массива, * чтобы правила основного файла CSS элемента * имели приоритет над правилами библиотечных файлов CSS, * которые элемент мог включать в массив $css. * Обратите внимание, что мы даже не проверяем, * присутствует ли уже $mainCss в массиве $css, * потому что @uses df_link_inline делает это сама. */ $css = df_array($css); /** * 2015-12-30 * Раньше я думал, что основной файл CSS используется всегда, однако нашлось исключение: * @see \Dfe\CurrencyFormat\FormElement обходится в настоящее время без CSS. */ if (df_asset_exists($path, $moduleName, 'less')) { $css[] = df_asset_name($path, $moduleName, 'css'); } /** * 2016-03-08 * Отныне getBeforeElementHtml() будет гарантированно вызываться благодаря * @used-by \Df\Framework\Plugin\Data\Form\Element\AbstractElement::afterGetElementHtml() */ $e['before_element_html'] .= df_cc_n(!df_asset_exists($path, $moduleName, 'js') ? null : df_x_magento_init($moduleName, $path, ['id' => $e->getHtmlId()] + df_clean($params)), df_link_inline($css)); }
/** * 2016-01-29 * @param string $c * @param string $del * @return string */ function df_cts_lc($c, $del) { return implode($del, df_explode_class_lc($c)); }