TYPO3 передает значение переменной Fluid в Javascript

В жидком шаблоне у меня есть переменная, значение которой я хотел бы использовать в своем коде JavaScript.

Я использую JavaScript внутри жидкого шаблона.

Мой код:

<!-- value I would use further in my javascript -->
<h1 id="product-model">{product.model}</h1>

<!-- Javascript code (in the same file) -->
<script>
   <![CDATA[
     function printProductWindow() {
       document.title = document.getElementById("product");
       window.print(); 
     } 
   ]]>
</script>

Заранее спасибо! Денис

5 ответов

Решение

Ваш идентификатор элемента неверен:

 document.title = document.getElementById("product-model");

потому что вы определили это как id="product-model",

В качестве альтернативы, если ваш JavaScript находится в FluidTemplate, вы также можете установить значение там:

<script>
  <![CDATA[
    function printProductWindow() {
      document.title = "]]>{product.model}<![CDATA[";
      window.print(); 
    } 
  ]]>
</script>

Но позвольте мне предупредить вас: изменение названия с помощью JavaScript не является хорошей практикой.

Взгляните на TitleTagViewHelper из расширения новостей здесь, чтобы увидеть одно решение, как это можно решить.

<script>
        function printProductWindow() {
            document.title = <f:format.raw>{product.model}<f:format.raw>;
            window.print(); 
        }
</script>

Для TYPO3 8.7.

Вы также можете использовать переменные жидкости в js, но в большинстве случаев вам нужно использовать формат viewhelper, например <f:format.htmlspecialchars>,

<script>
    <![CDATA[
        function printProductWindow() {
            document.title = '<f:format.htmlspecialchars>{product.model}<f:format.htmlspecialchars>';
            window.print(); 
        }
    ]]>
</script>

https://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ThingsToKnow/JsAndInline.html

<f:format.cdata>
   <script type="text/javascript">
      var myLayout;
      $(document).ready(function() {
         myLayout = $('body').layout({
            north__size: 27,
            north__initClosed: false,
            north__initHidden: false,
            center__maskContents: true // IMPORTANT - enable iframe masking
         });
      });
   </script>
</f:format.cdata>

Другой способ:

      <!-- value I would use further in my javascript -->
<h1>{product.model}</h1>

<!-- Javascript code (in the same file) -->
<script>
     function printProductWindow() {
       <f:format.raw>
       document.title = {product.model};
       window.print(); 
       </f:format.raw>
     } 
</script>

Поместите Viewhelper <f:format.raw> в ближайшие фигурные скобки, которые должны выводить переменную для правильного обнаружения жидкости.

Другие вопросы по тегам