web-dev-qa-db-fra.com

Attribuer un identifiant à la fonction javascript

Je développe un module (voir ici pour plus de détails Mixing PHP et variables JS en sortie )]. Il présente plusieurs utilisations de la même fonction javascript, comme suit:

$key     = $params->get('key');
$secret  = $params->get('secret');
$domain  = $params->get('domain');
$mediaid = $params->get('mediaid');
$expires = $params->get('expires');

function get_signed_player($key, $mediaid, $domain, $secret, $expires)
{
    $path      = 'players/' . $key . '-' . $mediaid . '.js';
    $signature = md5($path . ':' . $expires . ':' . $secret);
    $url       = 'http://' . $domain . '/' . $path . '?exp=' . $expires . '&sig=' . $signature;

    return $url;
}

echo '<p>Watch this cool video:</p>';
echo '<script src="' . get_signed_player($key, $mediaid, $domain, $secret, $expires) . '"></script>';

Cependant, lorsque j'assigne plusieurs modules à une page, celle-ci se bloque, je pense en raison de l'utilisation d'une fonction javascript en double.

J'espère pouvoir attribuer un identifiant au nom de la fonction. Je pensais que le moyen le plus simple serait de faire écho à l'ID de module en utilisant

echo $module->id;

mais si j'ajoute ceci au nom de la fonction, cela casse toujours. Idéalement, je veux quelque chose dans ce sens:

function get_signed_player' . $module->id . '($playerkey, $videokey, $domain, $secret, $expires)

Ce que j'appelle alors pour le frontend:

echo '<script src="' . get_signed_player' . $module->id . '($playerkey, $videokey, $domain, $secret, $expires) . '"></script>';
1
RustyJoomla

Résolu, nous publierons la réponse comme référence.

Le problème était que la fonction appartenait à default.php, qui est le fichier de vue et devrait être utilisé pour la sortie.

J'ai déplacé la fonction dans une classe de l'assistant comme ceci:

class ModJWPlayerwithURLTokenSigningHelper
{
    public function get_signed_player($playerkey, $videokey, $domain, $secret, $expires)
    {
        $path = 'players/' . $videokey . '-' . $playerkey . '.js';
        $sig  = md5($path . ':' . $expires . ':' . $secret);
        $url  = 'http://' . $domain . '/' . $path . '?sig=' . $sig . '&exp=' . $expires;

        return $url;
    }
}

Dans le mod_module.php, appelé le helper.php:

// Get Helper
require_once dirname(__FILE__) . '/helper.php';
$helper = new ModJWPlayerwithURLTokenSigningHelper();

Puis dans le default.php, appelée la fonction comme suit:

echo '<script src="' . $helper->get_signed_player($playerkey, $videokey, $domain, $secret, $expires) . '"></script>';
1
Lodder