web-dev-qa-db-fra.com

Joomla $ document-> addScriptDeclaration avec guillemets simples et doubles

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");
        });
    });
');
2
Perino

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

3
Lodder

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

Modifier

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>';
2
Farahmand

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);
2
David Fritsch