如何在joomla 3中添加内联脚本?

时间:2015-04-30 07:49:24

标签: javascript jquery joomla

我正在尝试在我的teplate中添加脚本,但它经常会出错:

  

解析错误:语法错误,意外T_CONSTANT_ENCAPSED_STRING   Z:\ home \ localhost \ www \ RealEstate \ templates \ real_estate \ index.php on   第21行

这是我的代码:

<?php

defined('_JEXEC') or die;

$app             = JFactory::getApplication();
$doc             = JFactory::getDocument();
$user            = JFactory::getUser();
$this->language  = $doc->language;
$this->direction = $doc->direction;

$params = $app->getTemplate(true)->params;


$doc->addStyleSheet('templates/' . $this->template . '/css/swiper.min.css');
$doc->addStyleSheet('templates/' . $this->template . '/css/style.css');

JHtml::_('jquery.framework');
$doc->addScript('templates/' . $this->template . '/js/swiper.min.js');
$doc->addScriptDeclaration('
  jQuery(document).ready(function() {
   var swiper = new Swiper('.swiper-container', {
   nextButton: '.swiper-button-next',
   prevButton: '.swiper-button-prev',
   pagination: '.swiper-pagination',
   slidesPerView: 3,
   slidesPerColumn: 2,
   paginationClickable: true,
   spaceBetween: -15,
   });
});
');

?>

我也在尝试这个:

JHtml::_('jquery.framework', false);
$doc->addScript('templates/' . $this->template . '/js/swiper.min.js');
$doc->addScriptDeclaration('
  $(document).ready(function() {
   var swiper = new Swiper('.swiper-container', {
   nextButton: '.swiper-button-next',
   prevButton: '.swiper-button-prev',
   pagination: '.swiper-pagination',
   slidesPerView: 3,
   slidesPerColumn: 2,
   paginationClickable: true,
   spaceBetween: -15,
   });
});
');

两者都不起作用但会出错。 你能不能让我们了解我做错了什么。

3 个答案:

答案 0 :(得分:2)

您正在以错误的方式连接字符串

将该脚本放在双引号中

$doc->addScriptDeclaration("
  jQuery(document).ready(function() {
   var swiper = new Swiper('.swiper-container', {
   nextButton: '.swiper-button-next',
   prevButton: '.swiper-button-prev',
   pagination: '.swiper-pagination',
   slidesPerView: 3,
   slidesPerColumn: 2,
   paginationClickable: true,
   spaceBetween: -15,
   });
});
");

答案 1 :(得分:2)

Try:
$doc->addScriptDeclaration('
  jQuery(document).ready(function() {
   var swiper = new Swiper(\'.swiper-container\', {
   nextButton: \'.swiper-button-next\',
   prevButton: \'.swiper-button-prev\',
   pagination: \'.swiper-pagination\',
   slidesPerView: 3,
   slidesPerColumn: 2,
   paginationClickable: true,
   spaceBetween: -15,
   });
});
');

答案 2 :(得分:1)

另一种分隔字符串而不需要转义引号的方法是 Heredoc 语法。

$doc->addScriptDeclaration(<<<JS_SCRIPT
  $(document).ready(function() {
   var swiper = new Swiper('.swiper-container', {
       nextButton: '.swiper-button-next',
       prevButton: '.swiper-button-prev',
       pagination: '.swiper-pagination',
       slidesPerView: 3,
       slidesPerColumn: 2,
       paginationClickable: true,
       spaceBetween: -15,
   });
  });
JS_SCRIPT
);
  

Heredoc 文本的行为就像一个双引号字符串,没有   双引号。这意味着heredoc中的引号不需要   已转义但仍可使用转义码listed above。   变量被扩展,但必须同样谨慎   用字符串表示heredoc中的复杂变量。   结束标识符必须从该行的第一列开始。   此外,标识符必须遵循与任何其他标识符相同的命名规则   PHP中的标签:它必须只包含字母数字字符和   下划线,并且必须以非数字字符或下划线开头。

     

警告请注意具有结束标识符的行非常重要   必须不包含其他字符,分号(;)除外。这意味着   特别是标识符可能没有缩进,也可能没有   分号前后的任何空格或制表符。这也是   重要的是要意识到结束前的第一个角色   identifier必须是本地操作系统定义的换行符。   这是在UNIX系统上的\ n,包括Mac OS X.结束分隔符   还必须跟一个换行符。

     

如果此规则被破坏且结束标识符不是“干净”,则为   不会被视为结束标识符,PHP将继续   寻找一个。如果之前未找到正确的结算标识符   当前文件的结尾,最后会产生一个解析错误   线。

     

Heredocs不能用于初始化类属性。自PHP   5.3,此限制仅对包含变量的heredoc有效。

参考:Heredoc