在PHP循环内执行JS而不创建许多<script>标签?

时间:2018-10-03 15:55:56

标签: javascript php

我想将这个正在工作的简单WordPress插件的一部分写到页脚,并且我需要能够使用内联脚本,以便可以在一些从中获取日期的函数中调用PHP。我网站的后端。

该插件可以正常工作,但是由于循环会获取每个日期,因此脚本会一遍又一遍地重复,从而导致无论其中有多少日期,页脚脚本都像这样:

  


 

等...

我曾尝试将循环内的JS放在其外部并使用函数进行调用,但它仍然不起作用(由于循环内需要使用vars),并且它仍显示脚本标记的负载在页脚中仅包含一个函数调用。无论如何,这是我的代码,希望有人有一些想法!

  function init_cal(){?>

<脚本>

//为每种类型的日期创建列表
  var yearList = [];
  var monthList = [];
  var dateList = []


<?php
if(have_rows('book','option')):
        while(have_rows('book','option')):the_row();

        //从acf获取日期的子字段值
                $ bookStart = get_sub_field('cal_date_start',false);
                $ bookEnd = get_sub_field('cal_date_end',false); ?>
                <脚本>

        //查找两个输入日期之间的天数
                var getDates = function(startDate,endDate){
                    变量日期= [],
                            currentDate = startDate,
                            addDays = function(days){
                                var date = new Date(this.valueOf());
                                date.setDate(date.getDate()+天);
                                归期;
                            };
                    while(currentDate <= endDate){
                        dates.push(currentDate);
                        currentDate = addDays.call(currentDate,1);
                    }
                    返回日期;
                };

        //获取日期,缩短日期,并在上面输入内容
            var date = getDates(

          //目标开始日期
          新日期(
            <?php echo substr($ bookStart,0,-4)?>,
            <?php echo substr($ bookStart,4,-2)?>,
            <?php echo substr($ bookStart,6)?>),

          //目标结束日期
          新日期(
            <?php echo substr($ bookEnd,0,-4)?>,
            <?php echo substr($ bookEnd,4,-2)?>,
            <?php echo substr($ bookEnd,6)?>)
          );

        //获取输出的日期并将其附加到列表中
                date.forEach(function(date){

                    var month = date.getMonth();

        //由于某些原因,第12个月显示为0,因此将其设置回12
                    如果(月== 0){
                        月= 12;
                    }
                    monthList.push(month);
                    var theDate = date.getDate();
                    dateList.push(theDate);
                    var year = date.getFullYear();

        //第12个月中的天数过早地添加了一年,因此将其重新设置
                    如果(月== 12){
                        年=年-1;
                    }
                    yearList.push(year);

                });
            
    <?php结束;
万一;
}
?>
 

非常感谢您的帮助,如果格式设置不正确,很抱歉,我以前没有在此网站上发布过。

1 个答案:

答案 0 :(得分:0)

好吧,您实际上并不能做很多,但是您可以在循环之前打开script标签,然后再关闭它,而在循环中仅打印js部分,因此您将只有一个script标签。 / p>