Archives FluxBB.fr

Les archives de FluxBB.fr

Vous n'êtes pas identifié(e).

#1 22-03-2006 13:29:04

Xarkam
Membre

Lien externes en nouvelle fenetre

Voila, je veux ouvrir les liens pointant vers l'extérieur de mon domaine dans une nouvelle fenêtre.
Contrairement à ceux de mon domaine qui eux doivent s'ouvrir dans la même fenêtre.
J'ai modifié un peux le parser de la facon suivante:
dans la fonction function handle_url_tag($url, $link = '') que j'ai modifié comme ceci:

function handle_url_tag($url, $link = '')
{
    global $pun_user;

    $full_url = str_replace(array(' ', '\'', '`'), array('%20', '', ''), $url);
    if (strpos($url, 'www.') === 0)            // If it starts with www, we add http://
        $full_url = 'http://'.$full_url;
    else if (strpos($url, 'ftp.') === 0)    // Else if it starts with ftp, we add ftp://
        $full_url = 'ftp://'.$full_url;
    else if (!preg_match('#^([a-z0-9]{3,6})://#', $url, $bah))     // Else if it doesn't start with abcdef://, we add http://
        $full_url = 'http://'.$full_url;

    // Ok, not very pretty :-)
    $link = ($link == '' || $link == $url) ? ((strlen($url) > 55) ? substr($url, 0 , 39).' … '.substr($url, -10) : $url) : stripslashes($link);

    if (stristr($url, "anges-dechus.info") === false)
    {
        return '<a href="'.$full_url.'" onclick="window.open(this.href); return false;">'.$link.'</a>';
    }
    else
    {
        return '<a href="'.$full_url.'">'.$link.'</a>';
    }
}

Le problème c'est qu'un lien externe est bien ouvert dans une nouvelle fenêtre, mais aussi dans la fenêtre active.
Pourtant le code généré à l'air correcte.

<div class="postmsg">
                    <p>Teste d'un <a href="http://www.exemple.com" onclick="window.open(this.href); return false;">lien</a> externe.<br />Teste d'un  <a href="http://www.anges-dechus.info">lien</a> interne.<br /><br /><em>ne fonctionne pas avec Internet Explorer</em></p>

                </div>

Vous pouvez comprendre ce que je veux dire ici : http://www.anges-dechus.info/punbb/view … 7041#p7041

Dernière modification par Xarkam (22-03-2006 13:30:24)

Hors ligne

#2 22-03-2006 14:14:53

vin100
Membre

Re : Lien externes en nouvelle fenetre

euh ... non c'est bon pour moi (IE et FF)

Hors ligne

#3 22-03-2006 14:23:37

Xarkam
Membre

Re : Lien externes en nouvelle fenetre

Étrange alors, moi sous linux ca ouvre les lien externe dans une nouvelle fenetre et la fenetre d'origine.

Dernière modification par Xarkam (22-03-2006 14:24:30)

Hors ligne

#4 22-03-2006 16:25:09

Xarkam
Membre

Re : Lien externes en nouvelle fenetre

Bon ca fonctionne, c'est qu'une extention dans mon firefox met le dawa wink
Sinon je me demandais si avec PHP_SELF sa fonctionnerait pour trouver le nom de domaine en lieu et place de mon "anges-dechus.info"

Hors ligne

#5 22-03-2006 16:34:32

Xarkam
Membre

Re : Lien externes en nouvelle fenetre

Bon ca à l'air de fonctionner. Si quelqu'un pouvais tester pour me confirmer la chose que je publie le mod sur punbb.org.

Hors ligne

#6 22-03-2006 17:35:45

Xarkam
Membre

Re : Lien externes en nouvelle fenetre

Voici le code exact et qui semble fonctionner dynamiquement.

Fichier à modifier: parser.php
rechercher:

function handle_url_tag($url, $link = '')
{
    global $pun_user;

    $full_url = str_replace(array(' ', '\'', '`'), array('%20', '', ''), $url);
    if (strpos($url, 'www.') === 0)            // If it starts with www, we add http://
        $full_url = 'http://'.$full_url;
    else if (strpos($url, 'ftp.') === 0)    // Else if it starts with ftp, we add ftp://
        $full_url = 'ftp://'.$full_url;
    else if (!preg_match('#^([a-z0-9]{3,6})://#', $url, $bah))     // Else if it doesn't start with abcdef://, we add http://
        $full_url = 'http://'.$full_url;

    // Ok, not very pretty :-)
    $link = ($link == '' || $link == $url) ? ((strlen($url) > 55) ? substr($url, 0 , 39).' &hellip; '.substr($url, -10) : $url) : stripslashes($link);

    return '<a href="'.$full_url.'">'.$link.'</a>';
}

remplacer par:

function handle_url_tag($url, $link = '')
{
    global $pun_user;

    $full_url = str_replace(array(' ', '\'', '`'), array('%20', '', ''), $url);
    if (strpos($url, 'www.') === 0)            // If it starts with www, we add http://
        $full_url = 'http://'.$full_url;
    else if (strpos($url, 'ftp.') === 0)    // Else if it starts with ftp, we add ftp://
        $full_url = 'ftp://'.$full_url;
    else if (!preg_match('#^([a-z0-9]{3,6})://#', $url, $bah))     // Else if it doesn't start with abcdef://, we add http://
        $full_url = 'http://'.$full_url;

    // Ok, not very pretty :-)
    $link = ($link == '' || $link == $url) ? ((strlen($url) > 55) ? substr($url, 0 , 39).' &hellip; '.substr($url, -10) : $url) : stripslashes($link);

    //return '<a href="'.$full_url.'">'.$link.'</a>';
    if (stristr($url, $_SERVER["SERVER_NAME"]) === false)
    {
        return '<a href="'.$full_url.'" onclick="window.open(this.href); return false;">'.$link.'</a>';
    }
    else
    {
        return '<a href="'.$full_url.'">'.$link.'</a>';
    }
}

Dernière modification par Xarkam (04-05-2006 16:05:31)

Hors ligne

#7 06-04-2006 18:29:56

LeChapitre
Membre

Re : Lien externes en nouvelle fenetre

Pour info je viens de tester sous IE ca marche wink

Hors ligne

#8 04-05-2006 12:05:19

Xarkam
Membre

Re : Lien externes en nouvelle fenetre

Bl4ckd0g a écrit :

Chez moi ça marche pas, ça m'agasse, j'ai tout essayé, modifier le parser, modifier aussi viewtopic et aucun resultat >_<

Ca ne fonctionne toujours pas ?

Hors ligne

#9 03-07-2006 18:03:49

mika
Membre

Re : Lien externes en nouvelle fenetre

Je remonte le topic, j'ai essayé vos codes, aucun ne marche pour moi sad

Hors ligne

#10 03-07-2006 23:06:30

vin100
Membre

Re : Lien externes en nouvelle fenetre

oh oui certainement mais il faut faire quelques tests qui engendrent "un coûts"

je préfère ma solution CSS même si elle ne fonctionne pas sous IE

Mika qu'est-ce que ça fait ? rien ?

Hors ligne

#11 04-07-2006 01:41:40

mika
Membre

Re : Lien externes en nouvelle fenetre

vin100 a écrit :

Mika qu'est-ce que ça fait ? rien ?

Tout à fait :'(

Hors ligne

#12 04-07-2006 06:48:02

vin100
Membre

Re : Lien externes en nouvelle fenetre

remplace $_SERVER["SERVER_NAME"] par $pun_config['base_url'] (ou un truc du genre à vérifier dans le fichier cache config)

Hors ligne

#13 04-07-2006 07:50:41

yemgi
Expatrié

Re : Lien externes en nouvelle fenetre

pourquoi utiliser un code javascript ? l'option target="_blank" permet la meme fonctionalité et tu es sur que ça ne s'ouvrira pas dans la fenetre d'origine. neutral

Hors ligne

#14 04-07-2006 07:53:06

Savatte
Membre

Re : Lien externes en nouvelle fenetre

Il veut que le lien s'ouvre dans une nouvelle fenetre automatiquement SI il ne pointe pas vers son domaine, si il pointe vers l'extérieur donc (perspicace smile)


Fallen Galaxy - http://fallengalaxy.com
Styles pour punBB - FallenCraft - BlueGalaxy

Hors ligne

#15 04-07-2006 08:13:17

yemgi
Expatrié

Re : Lien externes en nouvelle fenetre

oui c'est que j'avais compris smile
Ma question est pourquoi :

return '<a href="'.$full_url.'" onclick="window.open(this.href); return false;">'.$link.'</a>';

et pas

return '<a href="'.$full_url.'" target="_blank">'.$link.'</a>';

?

Hors ligne

#16 04-07-2006 08:59:17

vin100
Membre

Re : Lien externes en nouvelle fenetre

parce que PunBB est déclaré dans la variante strict de XHTML 1.0 et que l'attribut target n'est autorisé que dans les variantes transitional

ceci étant nous avons déjà débatu du sujet et ma conclusion est simple : ne mettez ni l'une ni l'autre des solutions, les utilisateurs n'ont pas à être obligé, laissez leur le choix d'ouvrir ou non une nouvelle fenêtre si ils le veulent comme ils le veulent quand il le veulent

Hors ligne

#17 04-07-2006 09:06:57

Pandark
Guide

Re : Lien externes en nouvelle fenetre

(Bon, j'avais commencé alors tant pis si vin100 a déjà répondu tongue..)

Parce que ça permet de garder une certaine conformitée, même si en en fait fait les recommendations du w3c de laisser l'utilisateur choisir la fenêtre dans laquelle va s'ouvrir le lien ne sont pas respectées..


=>  Plugins | Modifications | Liens utiles   <=
                .._ -Pandark- _..
                Serial Dreamer

Hors ligne

#18 04-07-2006 09:22:28

vin100
Membre

Re : Lien externes en nouvelle fenetre

voilà l'astuce du javascript c'est un contournement de la norme, ça passe au validateur mais ça reste non conforme

soit on change la déclaration de type pour faire du transitional (ce qui est à mon avis très con) soit on laisse tel quel (ce qui est à mon avis la meilleure chose à faire)

Hors ligne

#19 04-07-2006 12:00:59

yemgi
Expatrié

Re : Lien externes en nouvelle fenetre

Merci smile

Hors ligne

#20 04-07-2006 13:11:52

mika
Membre

Re : Lien externes en nouvelle fenetre

vin100 a écrit :

remplace $_SERVER["SERVER_NAME"] par $pun_config['base_url'] (ou un truc du genre à vérifier dans le fichier cache config)

Erf j'ai pas trouver ton $_SERVER["SERVER_NAME"]

Hors ligne

#21 04-07-2006 13:32:08

vin100
Membre

Re : Lien externes en nouvelle fenetre

tu as mis quoi comme code ?

Hors ligne

#22 04-07-2006 14:32:28

mika
Membre

Re : Lien externes en nouvelle fenetre

function handle_img_tag($url, $is_signature = false)
{
    global $lang_common, $pun_config, $pun_user;

        $img_tag = '<a href="'.$url.'"><'.$lang_common['Image link'].'></a>';

    if ($is_signature && $pun_user['show_img_sig'] != '0')
        $img_tag = '<img class="sigimage" src="'.$url.'" alt="'.htmlspecialchars($url).'" />';
    else if (!$is_signature && $pun_user['show_img'] != '0')
        $img_tag = '<img class="postimg" src="'.$url.'" alt="'.htmlspecialchars($url).'" />';

    return $img_tag;
}

Hors ligne

#23 04-07-2006 14:34:44

vin100
Membre

Re : Lien externes en nouvelle fenetre

ah ouais ? t'es sûr ? siffle

ce code c'est le code des balises IMG alors je ne vois pas trop ce que cela vient faire là

Hors ligne

#24 04-07-2006 19:18:56

mika
Membre

Re : Lien externes en nouvelle fenetre

Bah j'ai suivis le 1er post c'est pour ça ^^

Hors ligne

#25 04-07-2006 20:15:51

vin100
Membre

Re : Lien externes en nouvelle fenetre

le premier post :

function handle_url_tag($url, $link = '')
{
    global $pun_user;

    $full_url = str_replace(array(' ', '\'', '`'), array('%20', '', ''), $url);
    if (strpos($url, 'www.') === 0)            // If it starts with www, we add http://
        $full_url = 'http://'.$full_url;
    else if (strpos($url, 'ftp.') === 0)    // Else if it starts with ftp, we add ftp://
        $full_url = 'ftp://'.$full_url;
    else if (!preg_match('#^([a-z0-9]{3,6})://#', $url, $bah))     // Else if it doesn't start with abcdef://, we add http://
        $full_url = 'http://'.$full_url;

    // Ok, not very pretty :-)
    $link = ($link == '' || $link == $url) ? ((strlen($url) > 55) ? substr($url, 0 , 39).' &hellip; '.substr($url, -10) : $url) : stripslashes($link);

    if (stristr($url, "anges-dechus.info") === false)
    {
        return '<a href="'.$full_url.'" onclick="window.open(this.href); return false;">'.$link.'</a>';
    }
    else
    {
        return '<a href="'.$full_url.'">'.$link.'</a>';
    }
}

ton post :

function handle_img_tag($url, $is_signature = false)
{
    global $lang_common, $pun_config, $pun_user;

        $img_tag = '<a href="'.$url.'"><'.$lang_common['Image link'].'></a>';

    if ($is_signature && $pun_user['show_img_sig'] != '0')
        $img_tag = '<img class="sigimage" src="'.$url.'" alt="'.htmlspecialchars($url).'" />';
    else if (!$is_signature && $pun_user['show_img'] != '0')
        $img_tag = '<img class="postimg" src="'.$url.'" alt="'.htmlspecialchars($url).'" />';

    return $img_tag;
}

tu m'aurait dit le premier post dès le début sut été plus simple

essai plutôt ça :

function handle_url_tag($url, $link = '')
{
    global $pun_user, $pun_config;

    $full_url = str_replace(array(' ', '\'', '`'), array('%20', '', ''), $url);
    if (strpos($url, 'www.') === 0)            // If it starts with www, we add http://
        $full_url = 'http://'.$full_url;
    else if (strpos($url, 'ftp.') === 0)    // Else if it starts with ftp, we add ftp://
        $full_url = 'ftp://'.$full_url;
    else if (!preg_match('#^([a-z0-9]{3,6})://#', $url, $bah))     // Else if it doesn't start with abcdef://, we add http://
        $full_url = 'http://'.$full_url;

    // Ok, not very pretty :-)
    $link = ($link == '' || $link == $url) ? ((strlen($url) > 55) ? substr($url, 0 , 39).' &hellip; '.substr($url, -10) : $url) : stripslashes($link);

    //return '<a href="'.$full_url.'">'.$link.'</a>';
    if (stristr($url, $pun_config['o_base_url']))
        return '<a href="'.$full_url.'">'.$link.'</a>';
    else
        return '<a href="'.$full_url.'" onclick="window.open(this.href); return false;">'.$link.'</a>';
}

Hors ligne

Pied de page des forums