/** * 2015-11-19 * @override * @see \Magento\Framework\Data\Form\Element\Renderer\RendererInterface::render() * @param AE|\Df\Framework\Form\Element $element * @return string */ public function render(AE $element) { /** @var bool $labelAtRight */ $labelAtRight = E::shouldLabelBeAtRight($element); /** * 2015-12-11 * Класс .df-label-sibling означает: элемент рядом с label. * В данном случае это всегда непосредственно элемент управления, * а вот для блочных элементов это может быть div-оболочка вокруг элемента: * @see \Df\Backend\Block\Widget\Form\Renderer\Fieldset\Element::elementHtml() */ $element->addClass('df-label-sibling'); /** * 2015-12-28 * К сожалению, мы не можем назначать классы для label: * @uses \Magento\Framework\Data\Form\Element\AbstractElement::getLabelHtml() * https://github.com/magento/magento2/blob/2.0.0/lib/internal/Magento/Framework/Data/Form/Element/AbstractElement.php#L425 * Потому ситуацию, когда label расположена справа от элемента, * помечаем классом для элемента. * При этом сама label справа может быть выбрана селектором .df-label-sibling ~ label */ if ($labelAtRight) { $element->addClass('df-label-at-right'); } /** @var string $innerA */ $innerA = [$element->getLabelHtml(), $element->getElementHtml()]; if ($labelAtRight) { $innerA = array_reverse($innerA); } return df_tag('span', ['class' => df_cc_s('df-element-inline', 'df-field', E::getClassDfOnly($element), $element->getContainerClass())], implode($innerA)); }
/** * 2015-12-21 * Цель перекрытия — устранения дефекта: * «Magento 2 backend incorrectly renders the nested fieldsets: * adds nested TR tags with the same id». * https://mage2.pro/t/330 * * Этот дефект приводит к неработоспособности условия <depends> для элемента: * т.е. видимость элемента перестаёт зависеть от другой опции. * * @see \Magento\Config\Block\System\Config\Form\Fieldset::render() * @param Sb|F $sb * @param \Closure $proceed * @param AE $element * @return string */ public function aroundRender(Sb $sb, \Closure $proceed, AE $element) { /** @var string $result */ /** * 2016-01-01 * Потомки @see \Magento\Config\Block\System\Config\Form\Fieldset могли перекрыть метод * @see \Magento\Config\Block\System\Config\Form\Fieldset::render(). * Пример: @see \Magento\Config\Block\System\Config\Form\Fieldset\Modules\DisableOutput::render() * Поэтому в случае с классом-потомком неправильно не вызывать метод render(). */ if (get_class($sb) !== df_interceptor_name(Sb::class)) { $result = $proceed($element); } else { $sb->setElement($element); $result = $sb->_getHeaderHtml($element); foreach ($element->getElements() as $field) { if ($field instanceof \Magento\Framework\Data\Form\Element\Fieldset && !$field instanceof \Df\Framework\Form\Element\Fieldset) { $result .= df_tag('tr', ['id' => 'row_' . $field->getHtmlId()], df_tag('td', ['colspan' => 4], $field->toHtml())); } else { $result .= $field->toHtml(); } } $result .= $sb->_getFooterHtml($element); } return $result; }
/** * 2016-07-01 * @override * @see \Magento\Config\Block\System\Config\Form\Fieldset::_getHeaderCommentHtml() * https://github.com/magento/magento2/blob/2.1.0/app/code/Magento/Config/Block/System/Config/Form/Fieldset.php#L166-L175 * @used-by \Magento\Config\Block\System\Config\Form\Fieldset::_getHeaderHtml() * https://github.com/magento/magento2/blob/2.1.0/app/code/Magento/Config/Block/System/Config/Form/Fieldset.php#L121 * @param AE|F $element * @return string */ protected function _getHeaderCommentHtml($element) { /** @var string|null $infoClass */ $infoClass = dfa_deep($element->getData(), 'group/dfExtension'); /** @var string $result */ if (!$infoClass) { $result = parent::_getHeaderCommentHtml($element); } else { /** @var \Df\Config\Ext $extensionInfo */ $info = df_o($infoClass); $result = df_tag('div', 'comment', df_tag_ab(__('Have a question?'), $info->url())); } return $result; }
/** * 2015-12-21 * @override * @see \Magento\Framework\Data\Form\Element\Checkbox::getElementHtml() * @return string */ public function getElementHtml() { $this->addClass('df-checkbox'); if ($this->getChecked()) { $this->setData('checked', 'checked'); } else { $this->unsetData('checked'); } $this->unsetData('value'); /** @var string $result */ $result = ''; $htmlId = $this->getHtmlId(); if ($before = $this->getBeforeElementHtml()) { $result .= df_tag('label', ['class' => 'addbefore', 'for' => $htmlId], $before); } $result .= df_tag('input', df_fe_attrs($this)); if ($afterElementJs = $this->getAfterElementJs()) { $result .= $afterElementJs; } if ($after = $this->getAfterElementHtml()) { $result .= df_tag('label', ['class' => 'addafter', 'for' => $htmlId], $after); } return $result; }
/** * 2015-12-13 * Отличия от модифицируемого метода * @see \Magento\Framework\Data\Form\Element\AbstractElement::getLabelHtml(): * 1) Добавляем свои классы для Font Awesome. * 2) При использовании Font Awesome не добавляем исходную подпись * (значением которой является класс Font Awesome) * и выводим, по сути, пустые теги <label><span></span></label>. * 3) Добавляем атрибут title. * 2015-12-28 * 4) Добавляем класс, соответствующий типу элемента. * * Пример использования Font Awesome: https://github.com/mage2pro/core/tree/7cb37ab2c4d728bc20d29ca3c7c643e551f6eb0a/Framework/Data/Form/Element/Font.php#L40 * * @see \Df\Framework\Form\Element\Font::onFormInitialized() * @see \Magento\Framework\Data\Form\Element\AbstractElement::getLabelHtml() * @param Sb|E $sb * @param \Closure $proceed * @param string|null $idSuffix * @return string */ public function aroundGetLabelHtml(Sb $sb, \Closure $proceed, $idSuffix = '') { /** @var string|null|Phrase $label */ $label = $sb->getLabel(); /** @var string $result */ if (is_null($label)) { $result = ''; } else { $label = (string) $label; /** * 2015-12-25 * @see \Magento\Framework\Data\Form\Element\Multiline::getLabelHtml() * имеет другое значение по-умолчанию параметра $idSuffix: * public function getLabelHtml($suffix = 0) * https://github.com/magento/magento2/blob/2.0.0/lib/internal/Magento/Framework/Data/Form/Element/Multiline.php#L59 */ if ('' === $idSuffix && $sb instanceof Multiline) { $idSuffix = 0; } /** @var bool $isFontAwesome */ $isFontAwesome = df_starts_with($label, 'fa-'); /** @var string[] $classA */ $classA = ['label', 'admin__field-label', 'df-element-' . $sb->getType()]; if ($isFontAwesome) { $classA[] = 'fa'; $classA[] = $label; $label = ''; } /** @var array(string => string) $params */ $params = ['class' => df_cc_s($classA), 'for' => $sb->getHtmlId() . $idSuffix, 'data-ui-id' => E::uidSt($sb, 'label')]; /** @var string $title */ $title = (string) $sb->getTitle(); if ($title !== $label) { $params['title'] = $title; } $result = df_tag('label', $params, df_tag('span', [], $label)) . "\n"; } return $result; }
/** * 2016-11-23 * @see \Dfe\FacebookLogin\Button::loggedOut() * @used-by _toHtml() * @return string */ protected function loggedOut() { $unified = UNL::isUnified($this->s()->type()); return df_tag('a', $this->attributes(), df_tag_if($this->s()->label(), $unified, 'span')) . (!$unified ? '' : df_fa_link()) . (!$this->isInHeader() || UNL::isLink($this->s()->type()) || self::$_inlineIncluded ? '' : (self::$_inlineIncluded = df_style_inline('.df-theme-luma .page-header .header.panel {padding-bottom: 0.4rem;}'))); }
/** * 2016-08-19 * @override * @see \Magento\Backend\Block\Widget\Grid\Column\Renderer\AbstractRenderer::render() * @used-by \Magento\Backend\Block\Widget\Grid\Column::getRowField() * @used-by \Df\Sales\Plugin\Block\Adminhtml\Transactions\Detail\Grid::beforeAddColumn() * @param DataObject $row * @return string */ public function render(DataObject $row) { /** @var string|null $v */ $v = $this->_getValue($row); return df_check_json_complex($v) || df_check_xml($v) ? df_tag('pre', [], $v) : $v; }
/** * 2015-11-22 * @used-by \Df\Backend\Block\Widget\Form\Renderer\Fieldset\Element::_render() * @return string */ private function note() { if (!isset($this->{__METHOD__})) { /** @var string|null $note */ $note = $this->e()->getNote(); $this->{__METHOD__} = $note ? df_tag('p', ['class' => 'note'], df_tag('span', [], $note)) : ''; } return $this->{__METHOD__}; }
/** * 2016-10-24 * @param string $content * @param bool $condition * @param string $tag * @param string|array(string => string|string[]|int|null) $attributes [optional] * @param bool $multiline [optional] * @return string */ function df_tag_if($content, $condition, $tag, $attributes = [], $multiline = null) { return !$condition ? $content : df_tag($tag, $attributes, $content, $multiline); }
/** * @param int|string $value * @param string $label * @return string */ private function renderOptionTag($value, $label) { /** @var array(string => string) $attributes */ $attributes = ['value' => $value, 'label' => $label]; if ($value === $this->getSelected()) { $attributes['selected'] = 'selected'; } return df_tag('option', $attributes, $label); }
/** * @param string $item * @return string */ private function renderItem($item) { return df_tag('li', $this->getAttributesForItem(), $item); }
/** * 2016-05-30 * 2016-06-07 * 'id' => $this->getId() нужно для совместимости с 2.0.6, * иначе там сбой в выражении inputs = $(idTo).up(this._config.levels_up) * https://mail.google.com/mail/u/0/#search/maged%40wrapco.com.au/15510135c446afdb * @override * @see \Magento\Framework\Data\Form\Element\AbstractElement::getElementHtml() * @return string */ public function getElementHtml() { return df_tag('div', ['class' => 'df-url', 'id' => $this->getId()], $this->thirdPartyLocalhost() ? $this->messageForThirdPartyLocalhost() : $this->messageForOthers()); }
/** * 2015-10-26 * https://mage2.pro/t/145 * 2016-11-28 * Пример: https://github.com/magento/magento2/blob/2.1.2/app/code/Magento/Theme/view/frontend/templates/js/cookie.phtml#L16-L26 * Такой синтаксис, в отличие от @see df_x_magento_init_att(), * не позволяет нам иметь в JavaScript объект-элемент DOM вторым параметром: * https://github.com/magento/magento2/blob/2.1.2/lib/web/mage/apply/main.js#L69-L70 * @used-by df_fe_init() * @param string|object $module * @param string $script * @param array(string => mixed) $params * @return string */ function df_x_magento_init($module, $script, array $params = []) { return df_tag('script', ['type' => 'text/x-magento-init'], df_json_encode(['*' => [df_cc_path(df_module_name($module), $script) => $params]])); }
/** * 2016-08-29 * @return string */ function df_caller_mh() { return df_tag('b', [], df_caller_ml(1)); }