#cakephp #helper #cakephp-3.8
#cakephp #помощник #cakephp-3.8
Вопрос:
В моем коде есть несколько скриптовых блоков, которые поступают с разных страниц, но он должен создавать один <script>
тег для всех JavaScripts, написанных в CakePHP ScriptBlock .
Приведенный ниже пример кода создает отдельные <script>
теги для каждого.
echo $this->Html->scriptBlock(
'jQuery(".investment-table tbody>tr").show()',
['block' => true]
);
echo $this->Html->scriptBlock(
'jQuery(".investment-table tbody>tr").hide()',
['block' => true]
);
echo $this->Html->scriptBlock(
'jQuery(".investment-table tbody>tr").remove()',
['block' => true]
);
Пожалуйста, предложите правильный метод для достижения этого на многих страницах.
Ответ №1:
HtmlHelper::scriptBlock()
по умолчанию используется для создания одного <script>
элемента для каждого вызова.
На самом деле это не должно быть проблемой, поскольку:
<script>jQuery(".investment-table tbody>tr").show()</script>
<script>jQuery(".investment-table tbody>tr").hide()</script>
<script>jQuery(".investment-table tbody>tr").remove()</script>
и
<script>
jQuery(".investment-table tbody>tr").show()
jQuery(".investment-table tbody>tr").hide()
jQuery(".investment-table tbody>tr").remove()
</script>
функционально идентичны.
Однако, ради аргумента, если вам по какой-либо причине нужны вещи в один и тот же элемент, вы можете, например, записать в пользовательский блок, а затем вывести этот пользовательский блок в блоке сценария, что-то вроде этого:
$this->append(
'mergedScripts',
'jQuery(".investment-table tbody>tr").show();'
);
$this->append(
'mergedScripts',
'jQuery(".investment-table tbody>tr").remove();'
);
$this->append(
'mergedScripts',
'jQuery(".investment-table tbody>tr").remove();'
);
echo $this->Html->scriptBlock($this->fetch('mergedScripts'));
Смотрите также