Je suis aux prises avec le problème suivant: je dois utiliser des guillemets simples et des guillemets doubles dans Joomla $ document-> addScriptDeclaration.
$document->addScriptDeclaration('
jQuery(document).ready(function () {
jQuery("a[href="#location").on('shown', function (e) {
initialize();
});
});
');
Mon problème ici est le sélecteur qui doit généralement être adressé avec jQuery ("a [href =" # location "]). Voici maintenant la situation entre guillemets doubles entre guillemets doubles. Passer en guillemet simple n'est pas possible, car le script la déclaration est entre guillemets simples.
Comment puis-je résoudre ce problème?
Le début de la vue est:
// No direct access
defined('_JEXEC') or die;
//JHtml::addIncludePath(JPATH_COMPONENT.'helpers/html');
JHtml::_('behavior.tooltip');
JHtml::_('behavior.formvalidation');
JHtml::_('behavior.keepalive');
$document = JFactory::getDocument();
$document->addScriptDeclaration('
jQuery(document).ready(function () {
// remove top banner manual because it is a module loaded by list
jQuery("#top-content-banner").remove();
jQuery("a[href=\'#location\']").on("shown", function (e) {
alert("Hello");
});
});
');
Vous devez échapper aux guillemets en utilisant des barres obliques inversées comme ceci:
// No direct access
defined('_JEXEC') or die;
//JHtml::addIncludePath(JPATH_COMPONENT.'helpers/html');
JHtml::_('behavior.tooltip');
JHtml::_('behavior.formvalidation');
JHtml::_('behavior.keepalive');
JHtml::_('bootstrap.framework');
$document = JFactory::getDocument();
$document->addScriptDeclaration('
jQuery(document).ready(function($) {
$("a[href=\'#location\']").on("shown", function(e) {
alert("it has worked");
});
});
');
Notez les guillemets simples que j'ai ajoutés aussi.
J'espère que cela t'aides
Vous pouvez utiliser la chaîne Heredoc comme ceci:
$s = <<<SCRPT
jQuery(document).ready(function () {
jQuery("a[href='#location']").on('shown', function (e) {
initialize();
});
});
SCRPT;
$document->addScriptDeclaration($s);
Vous pouvez le tester vous-même. Ça marche:
$s = <<<SCRPT
jQuery(document).ready(function () {
jQuery("a[href='#location']").on('click', function () {
alert('Yes');
});
});
SCRPT;
$document->addScriptDeclaration($s);
echo '<a href="#location">Click Here</a>';
En guise d’autre option, bien que je recommande d’autres réponses à celle-ci, vous pouvez également utiliser la mise en mémoire tampon de sortie pour résoudre le problème des devis:
ob_start();
// close the php tag, so this would normally just print directly to the page
// output buffering will allow us to capture it and store it in a variable
?>
jQuery(document).ready(function () {
jQuery("a[href='#location']").on('shown', function (e) {
initialize();
});
});
<?php
$s = ob_get_clean();
$document->addScriptDeclaration($s);