Несколько в CakePHP JavaScript код сценария должен прийти в один HTML-код Tag

#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'));
  

Смотрите также