Exemplo n.º 1
0
/**
 * 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));
}
Exemplo n.º 2
0
/**
* 2016-11-22
* @param string|object $module
* @param string $template [optional]
* @param array $vars [optional]
* Параметры $vars будут доступны в шаблоне в качестве переменных:
* @see \Magento\Framework\View\TemplateEngine\Php::render()
		extract($dictionary, EXTR_SKIP);
* https://github.com/magento/magento2/blob/2.1.2/lib/internal/Magento/Framework/View/TemplateEngine/Php.php#L58
* @return string
*/
function df_phtml($module, $template, array $vars = [])
{
    return df_block(null, [], df_module_name($module) . '::' . $template, $vars)->toHtml();
}
Exemplo n.º 3
0
Arquivo: O.php Projeto: mage2pro/core
 /**
  * 2016-07-19
  * @used-by Df_Localization_Model_Dictionary::e()
  * @param string $localPath [optional]
  * @return string
  */
 protected function modulePathEtc($localPath = '')
 {
     return df_module_path_etc(df_module_name($this), $localPath);
 }
Exemplo n.º 4
0
 /**
  * 2016-11-21
  * Цель плагина — устранение дефекта метода
  * @see \Magento\Framework\View\Element\AbstractBlock::extractModuleName(),
  * который работает некорректно (возвращает пустую строку),
  * если класс модуля не имеет префикса «Block»:
  * https://github.com/magento/magento2/blob/2.1.2/lib/internal/Magento/Framework/View/Element/AbstractBlock.php#L846-L860
  * @see \Magento\Framework\View\Element\AbstractBlock::getModuleName()
  *
  * @param Sb $sb
  * @param string $r
  * @return string
  */
 public function afterGetModuleName(Sb $sb, $r)
 {
     return $r ?: ($sb['module_name'] = df_module_name($sb));
 }
Exemplo n.º 5
0
Arquivo: js.php Projeto: mage2pro/core
/**
 * 2016-11-28
 * Такой синтаксис, в отличие от @see df_x_magento_init(),
 * позволяет нам иметь в JavaScript объект-элемент DOM вторым параметром:
 * https://github.com/magento/magento2/blob/2.1.2/lib/web/mage/apply/main.js#L69-L70
 * Пример: https://github.com/magento/magento2/blob/2.1.2/app/code/Magento/Checkout/view/frontend/templates/cart/minicart.phtml#L30-L38
 * @see json_encode всегда использует двойные кавычки,
 * а @see \Df\Core\Format\Html\Tag::openTagWithAttributesAsText()
 * всегда обрамляет значение в одинарные кавычки,
 * поэтому df_x_magento_init_att() всегда совместима с @see df_tag()
 * @param string|object $module
 * @param string $script
 * @param array(string => mixed) $params
 * @return array(string => string)
 */
function df_x_magento_init_att($module, $script, array $params = [])
{
    return ['data-mage-init' => df_json_encode([df_cc_path(df_module_name($module), $script) => $params])];
}
Exemplo n.º 6
0
/**
 * 2016-08-27
 * @param string|object $module
 * @param string|null $scope [optional]
 * @return string
 */
function df_route($module, $scope = 'frontend')
{
    return dfcf(function ($m, $s) {
        return df_route_config()->getRouteFrontName($m, $s);
    }, [df_module_name($module), $scope]);
}
Exemplo n.º 7
0
/**
 * 2015-08-14
 * https://mage2.pro/t/57
 * https://mage2.ru/t/92
 *
 * 2015-09-02
 * Метод @uses \Magento\Framework\Module\Dir\Reader::getModuleDir()
 * в качестве разделителя путей использует не DIRECTORY_SEPARATOR, а /
 *
 * 2016-11-17
 * В качестве $moduleName можно передавать:
 * 1) Имя модуля. «A_B»
 * 2) Имя класса. «A\B\C»
 * 3) Объект класса.
 *
 * Результат намеренно не кэшируем,
 * потому что @uses \Magento\Framework\Module\Dir\Reader::getModuleDir() его отлично сам кэширует.
 *
 * @used-by \Df\Core\O::modulePath()
 * @used-by df_test_file()
 * @param string|object $moduleName
 * @param string $type [optional]
 * @return string
 * @throws \InvalidArgumentException
 */
function df_module_dir($moduleName, $type = '')
{
    /** @var ModuleDirReader $reader */
    $reader = df_o(ModuleDirReader::class);
    return $reader->getModuleDir($type, df_module_name($moduleName));
}
Exemplo n.º 8
0
/**
 * 2016-02-16
 * «Dfe\CheckoutCom\Method» => «dfe_checkout_com»
 * 2016-10-20
 * Нельзя делать параметр $c опциональным, потому что иначе получим сбой:
 * «get_class() called without object from outside a class»
 * https://3v4l.org/k6Hd5
 * @param string|object $c
 * @param string $del [optional]
 * @return string
 */
function df_module_name_lc($c, $del = '_')
{
    return implode($del, df_explode_class_lc_camel(df_module_name($c, '\\')));
}