/** * 2016-09-03 * @override * Неправильно вызывать @uses df_fe_init() в методе * @see \Df\Framework\Form\Element\Select2::onFormInitialized(), * потому что onFormInitialized() вызывается на * @see \Df\Framework\Form\Element\Select2::setForm() * плагином @see \Df\Framework\Plugin\Data\Form\Element\AbstractElement::afterGetElementHtml() * https://github.com/mage2pro/core/blob/1.7.33/Framework/Plugin/Data/Form/Element/AbstractElement.php?ts=4#L77-L83 * и туда мы попадаем из метода @see \Magento\Config\Block\System\Config\Form::_initElement() * в точке https://github.com/magento/magento2/blob/2.1.1/app/code/Magento/Config/Block/System/Config/Form.php#L347-L367 * перед инициализацией опций выпадающего списка, * которая происходит в том же методепозже, в точке * https://github.com/magento/magento2/blob/2.1.1/app/code/Magento/Config/Block/System/Config/Form.php#L376-L378 * * Поэтому вызываем @uses df_fe_init() в методе @see \Df\Framework\Form\Element\Select2::setRenderer(), * который вызывается из метода @see \Magento\Config\Block\System\Config\Form::_initElement() * уже после инициализации опций выпадающего списка, в точке * https://github.com/magento/magento2/blob/2.1.1/app/code/Magento/Config/Block/System/Config/Form.php#L379 * * @see \Magento\Framework\Data\Form\Element\AbstractElement::setRenderer() * @used-by \Magento\Config\Block\System\Config\Form::_initElement() * https://github.com/magento/magento2/blob/2.1.1/app/code/Magento/Config/Block/System/Config/Form.php#L379 * @param IRenderer $renderer * @return $this */ public function setRenderer(IRenderer $renderer) { /** * 2016-09-03 * В первый раз мы попадаем сюда отсюда: * @see \Magento\Framework\Data\Form\Element\Fieldset::addField() * https://github.com/magento/magento2/blob/2.1.1/lib/internal/Magento/Framework/Data/Form/Element/Fieldset.php#L213 * В этот момент опции выпадающего списка ещё не инициализированы, * поэтому дожидаемся их инициализации. */ if (!isset($this->{__METHOD__}) && $this->getValues()) { /** * 2016-09-03 * Этот класс присваивается оригинальному элементу select * (который при использовании select2 вроде бы роли не играет), * и родительскому контейнеру .df-field, который присутствует в том случае, * если наш элемент управления был создан внутри нашего нестандартного филдсета, * и осутствует, если наш элемент управления является элементом управления вернхнего уровня * (то есть, указан в атрибуте «type» тега <field>). */ $this->addClass(df_cc_s('df-select2', $this->customCssClass())); df_fe_init($this, __CLASS__, df_asset_third_party('Select2/main.css'), ['cssClass' => df_cc_s('df-select2', $this->customCssClass(), Fieldset::customCssClassByShortName(df_fe_name_short($this->getName()))), 'options' => $this->getValues(), 'value' => $this->getValue(), 'width' => $this->width()]); $this->{__METHOD__} = true; } return parent::setRenderer($renderer); }
/** * 2015-11-19 * @override * @see \Df\Framework\Form\Element\Fieldset::onFormInitialized() * @used-by \Df\Framework\Plugin\Data\Form\Element\AbstractElement::afterSetForm() * @return void */ public function onFormInitialized() { parent::onFormInitialized(); // 2016-07-30 // Этот стиль будет применён к элементу <fieldset>. $this->addClass('df-font'); $this->checkbox(O::enabled, 'Setup?'); /** @var FInline $row1 */ $row1 = $this->fieldsetInline('df-checkboxes')->hide(); $row1->checkbox(O::bold, 'B', ['title' => 'Bold']); $row1->checkbox(O::italic, 'I', ['title' => 'Italic']); $row1->checkbox(O::underline, 'U', ['title' => 'Underline']); $row1->color(O::color, null, ['title' => 'Font Color']); /** @var FInline $row2 */ $row2 = $this->fieldsetInline('df-family')->hide(); $row2->field(O::family, GoogleFont::class, null, ['title' => 'Font Family']); /** @var array(array(string => string)) $sizeValues */ $sizeValues = [Q::P__VALUES => SizeUnit::s()->toOptionArray()]; $row2->quantity(O::size, null, $sizeValues + ['title' => 'Font Size']); /** @var FInline $row3 */ $row3 = $this->fieldsetInline('row3')->hide(); /** * 2015-12-13 * Намеренно указываем в качестве подписи пустую строку, а не null, * чтобы получить пустые теги <label><span></span></label> * и потом стилизовать их своей иконкой. */ $row3->quantity(O::letter_spacing, '', $sizeValues + ['title' => 'Letter Spacing']); /** * 2015-12-13 * Передаём в качестве подписи название класса Font Awesome. * Такое стало возможным благодаря моему плагину * @used-by \Df\Framework\Plugin\Data\Form\Element\AbstractElement::aroundGetLabelHtml() * https://github.com/mage2pro/core/tree/73bed4fbb751ab47ad1bb70a8d90f455da26b500/Framework/Data/Form/Element/AbstractElementPlugin.php#L53 */ /** * 2015-12-13 .test { transform : scale(1,1.5); -webkit-transform:scale(1,1.5); // Safari and Chrome -moz-transform:scale(1,1.5); // Firefox -ms-transform:scale(1,1.5); // IE 9+ -o-transform:scale(1,1.5); // Opera letter-spacing: 10px; } * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#scale() * http://stackoverflow.com/a/16447826 */ $row3->percent(O::scale_horizontal, 'fa-text-width', 100, ['title' => 'Horizontal Scale']); $row3->percent(O::scale_vertical, 'fa-text-height', 100, ['title' => 'Vertical Scale']); /** * 2015-12-13 * Намеренно указываем в качестве подписи пустую строку, а не null, * чтобы получить пустые теги <label><span></span></label> * и потом стилизовать их своей иконкой. */ df_hide($this->select(O::letter_case, '', LetterCase::s(), ['title' => 'Letter Case'])); df_fe_init($this, __CLASS__, df_fa()); }
/** * 2015-11-19 * @override * @see \Df\Framework\Form\Element\Fieldset::_construct() * @used-by \Magento\Framework\Data\Form\AbstractForm::__construct() * @return void */ protected function _construct() { $this->addClass('df-fieldset-inline'); parent::_construct(); }