web-dev-qa-db-fra.com

Avoir des liens SEF absolus dans Joomla

Quand je suis en page d'accueil, tout va bien. Toutes les images et tous les éléments sont chargés car l’URL relative fonctionne. Mais lorsque je visite une page interne, telle que:

example.com/terms

Les liens des images se cassent, car j'ai activé les liens SEF et tant que les liens sont générés dans un "style relatif", les liens ne fonctionnent pas. Par exemple, dans une image (générée par Language Switched Module), l'attribut src est:

"/images/flags/en.png"

J'ai besoin de l'URL ci-dessus pour être généré absolument.

1
Mostafa Talebi

Assurez-vous que le plug-in System - SEF Est publié. Ce plugin contient le code suivant, qui devrait ajouter le chemin d’URL correct aux images avant le rendu de la page:

// Replace src links.
$base   = JUri::base(true) . '/';
$buffer = $this->app->getBody();

// Replace index.php URI by SEF URI.
if (strpos($buffer, 'href="index.php?') !== false)
{
    preg_match_all('#href="index.php\?([^"]+)"#m', $buffer, $matches);
    foreach ($matches[1] as $urlQueryString)
    {
        $buffer = str_replace('href="index.php?' . $urlQueryString . '"', 'href="' . JRoute::_('index.php?' . $urlQueryString) . '"', $buffer);
    }
    $this->checkBuffer($buffer);
}

// Check for all unknown protocals (a protocol must contain at least one alpahnumeric character followed by a ":").
$protocols = '[a-zA-Z0-9\-]+:';
$attributes = array('href=', 'src=', 'poster=');
foreach ($attributes as $attribute)
{
    if (strpos($buffer, $attribute) !== false)
    {
        $regex  = '#\s+' . $attribute . '"(?!/|' . $protocols . '|\#|\')([^"]*)"#m';
        $buffer = preg_replace($regex, ' ' . $attribute . '"' . $base . '$1"', $buffer);
        $this->checkBuffer($buffer);
    }
}

Dans ce cas, le true dans la JUri::base(true) signifie que c'est le chemin qui est généré plutôt que l'URL complète. Vous pouvez obtenir un lien absolu en supprimant le mot "true", mais notez qu'en pratique, vous ne devez jamais éditer les fichiers centraux. Un nouveau plug-in doit donc être effectué correctement. De plus, le chemin de base et l'URL absolue doivent tous deux fonctionner. Même si le problème est résolu, la cause réelle de votre problème est fort probablement ailleurs.

Votre exemple /images/flags/en.png Donne en fait l'impression que ce plugin fonctionne correctement, car cela / Au début (en supposant que votre site se trouve à la racine de votre domaine) signifie qu'il chargera l'image à partir de la racine plutôt que par rapport à la page sur laquelle vous vous trouvez, comme il se doit. Dans votre base de données, l'image sera probablement enregistrée dans images/flags/en.png.

Cette image existe-t-elle à l'adresse http://www.yourdomain.com/images/flags/en.png ? Si non, d'où se charge l'image à partir de laquelle SEF est désactivé?

3
Richard B

Si votre image apparaît dans le corps HTML comme ça

<img src="images/image.png">

en front-end, gardez à l'esprit que les URL sont liées à votre URL de base, qui est ajoutée en tant que balise méta de base dans votre page

<head>

et parfois dans Joomla pas correctement généré

2
Alexandr