Createdatafield.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. namespace Dotdigitalgroup\Email\Block\Adminhtml\Config;
  3. class Createdatafield extends \Magento\Config\Block\System\Config\Form\Field
  4. {
  5. /**
  6. * Button label.
  7. *
  8. * @var string
  9. */
  10. public $buttonLabel = 'New Datafield';
  11. /**
  12. * @param string $buttonLabel
  13. *
  14. * @return $this
  15. */
  16. public function setButtonLabel($buttonLabel)
  17. {
  18. $this->buttonLabel = $buttonLabel;
  19. return $this;
  20. }
  21. /**
  22. * @return $this
  23. */
  24. protected function _prepareLayout()
  25. {
  26. parent::_prepareLayout();
  27. if (!$this->getTemplate()) {
  28. $this->setTemplate('system/config/createdatafield.phtml');
  29. }
  30. return $this;
  31. }
  32. /**
  33. * Get the button and scripts contents.
  34. *
  35. * @param \Magento\Framework\Data\Form\Element\AbstractElement $element
  36. *
  37. * @return string
  38. */
  39. public function _getElementHtml(
  40. \Magento\Framework\Data\Form\Element\AbstractElement $element
  41. ) {
  42. $originalData = $element->getOriginalData();
  43. $buttonLabel = !empty($originalData['button_label'])
  44. ? $originalData['button_label'] : $this->buttonLabel;
  45. $url = $this->_urlBuilder->getUrl('dotdigitalgroup_email/datafield/save');
  46. $this->addData(
  47. [
  48. 'button_label' => $buttonLabel,
  49. 'html_id' => $element->getHtmlId(),
  50. 'ajax_url' => $url,
  51. ]
  52. );
  53. return $this->_toHtml();
  54. }
  55. /**
  56. * Unset some non-related element parameters.
  57. *
  58. * @param \Magento\Framework\Data\Form\Element\AbstractElement $element
  59. *
  60. * @return string
  61. */
  62. public function render(
  63. \Magento\Framework\Data\Form\Element\AbstractElement $element
  64. ) {
  65. $element->unsScope()->unsCanUseWebsiteValue()->unsCanUseDefaultValue();
  66. return parent::render($element);
  67. }
  68. /**
  69. * @param string $title
  70. *
  71. * @return string
  72. *
  73. * @throws \Magento\Framework\Exception\LocalizedException
  74. */
  75. public function _getAddRowButtonHtml($title)
  76. {
  77. return $this->getLayout()->createBlock('adminhtml/widget_button')
  78. ->setType('button')
  79. ->setLabel($title)
  80. ->setOnClick('createDatafield(this.form, this);')
  81. ->toHtml();
  82. }
  83. }