Ouvrir une url dans un autre onglet ?

Mammouth du PHP | 545 Messages

20 avr. 2007, 20:39

Bonjour,

Cela fait quelques jours que je me tue à essayer que les liens disponibles dans mon blog (Dotclear) s'ouvrent dans un nouvel onglet et je me demande si, ici, quelqu'un pourrait me donner un coup de main car personne n'a visiblement l'inspiration sur leur forum.

Si vous regardez sur mon blog, les liens qui se situent dans la barre orange en haut de l'écran sont appelès par cette fonction:
<?php dcBlogroll::linkList(); ?>
qui elle même est, je pense, défini comme ceci:
class linkSwitcher {

        /**
        @function	linkList

        Cette fonction affiche la liste des liens, soit comme la méthode dcBlogRoll::linkList()
	de DotClear ou sous forme de liste déroulante, ou les deux.

	@param  mixed   link_select	Liens à afficher en tant que liste déroulante.
					Ce paramètre peut être :	
					  + un tableau (listant les url des liens)
					  + une expression régulière (basée sur les urls des liens)
					    ssi $regex_mode = true
					  + la valeur 'ALL' pour tous les liens
	
	@param  boolean regex_mode	Active ou non le mode regex (true|false)
	
	@param  string  links_block	Mise en forme du bloc "Liens" avec les liens en dehors et
					dedans la liste déroulante (%1$s correspond aux liens en affichage
					normal et %2$d correspond à la liste déroulante
	
	@param	string	category	Mise en forme d'une catégorie (cf dcBlogRoll::linkList())

	@param  string  block		Mise en forme de la liste des liens non compris dans la
					liste déroulante
	
	@param  string  item		Mise en forme des éléments de la liste des liens non compris
					dans la liste déroulante
	*/

	function linkList( $links_select='', $regex_mode=false, 
		          $links_block='%1$s<br />%2$s',
			  $category='<h3>%s</h3>',
			  $block='<ul>%s</ul>', $item='<li>%s</li>') {

        	global $con, $blog;

		$req = 'SELECT link_id, label, href, title, lang, rel '.
			'FROM '.$blog->t_link.' '.
                        'ORDER BY position';


        	if ( ($rs_link = $con->select($req)) !== false ) {

			$list = '<option value="" >'; //la première valeur
			$liens = '';
			$cat = '';

			# var pour savoir si on est dans une catégorie
			$in_cat = false;
			# vars pour savoir si une catégorie est vide ou non dans la liste ou l'affichage
			# normal. Si elle est vide, on ne l'afiche pas
			$empty_cat_in_list   = true;
			$empty_cat_in_normal = true;

                	while (!$rs_link->EOF()) {

				$id    = $rs_link->f('link_id');
				$label = $rs_link->f('label');
                                $href  = $rs_link->f('href');
                                $title = $rs_link->f('title');
                                $lang  = $rs_link->f('lang');
                                $rel   = $rs_link->f('rel');

				if( !$label && !$href ) {
					# c'est une catégorie
					if($in_cat) {
						if(!$empty_cat_in_list) $list.='</optgroup>'; // on ferme la catégorie précédente
						$empty_cat_in_list   = true;
						$empty_cat_in_normal = true;
					}
					$cat = $title;
					$in_cat = true;
				}
				else {
					if ( $links_select === 'ALL' ||
					     ( is_array($links_select) && in_array($href, $links_select) ) ||
					     ( $regex_mode && ereg($links_select,$href) )
					   ) {
						if($in_cat && $empty_cat_in_list) { 
							$list.= '<optgroup label="'.$cat.'">';
							$empty_cat_in_list = false;
						}

						$list.='<option id="lS_option_'.$id.'" value="'.$id.'" '.
							'title="'.htmlspecialchars($title).'" lang="'.htmlspecialchars($lang).'" >'.$label;
					}
					else {
						if($in_cat && $empty_cat_in_normal) {
							$liens .= sprintf($category, $cat);
							$empty_cat_in_normal = false;
						}

	                                	$lien = '<a href="'.htmlspecialchars($href).'"'.
							((!$lang) ? '' : ' hreflang="'.htmlspecialchars($lang).'"').
							((!$title) ? '' : ' title="'.htmlspecialchars($title).'"').
							((!$rel) ? '' : ' rel="'.htmlspecialchars($rel).'"').
							' onclick="window.open(this.href);return false;">'.htmlspecialchars($label).'</a>';

                                		$liens .= sprintf($item,$lien);
					}
                        	}
                        	$rs_link->moveNext();
                	}
			if($in_cat && !$empty_cat_in_list) $list.='</optgroup>';

			$list = '<form id="lS_form" method="post" action="'.dc_app_url.'/ecrire/tools/linkSwitcher/redirect.php" >'."\n".
				'<select id="lS_select" name="link" size="1" onchange="this.form.submit();" >'."\n".
				$list."\n".
				'</select>'."\n".
				'<input id="lS_submit" type="submit" value="go">'."\n".
				'</form>'."\n";

			$liens = sprintf($block, $liens);

                	printf($links_block,$liens,$list);
        	}
	}
Donc comme je le disais, j'aimerai que mon lien url s'ouvre sur une nouvelle fenêtre mais je ne sais pas comment m'y prendre ... puis-je utiliser la fonction tel quel ou créer une fonction JS mais comment les faire interagir ?

Merci d'avance pour le coup de main
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 avr. 2007, 20:52

Et euh..... avec un simple target="_blank" dans ta balise de lien, ca irait pas ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 545 Messages

20 avr. 2007, 21:23

Et euh..... avec un simple target="_blank" dans ta balise de lien, ca irait pas ?
A ma connaissance, cela ne s'utilise que ainsi:
<a href="<?php dcBlogroll::linkList();?>" target="_blank" ><?php dcBlogroll::linkList();?></a>
Mais le problème est que cela plante avec
<a href= ...
J'ai laissé le résultat temporairement sur le blog

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Avatar du membre
ViPHP
ViPHP | 3008 Messages

20 avr. 2007, 21:27

Il y a un HREF dans la fonction linkList();. N'est-ce pas dedans que tu dois intégrer ton target ?

Mammouth du PHP | 545 Messages

20 avr. 2007, 21:38

Il y a un HREF dans la fonction linkList();. N'est-ce pas dedans que tu dois intégrer ton target ?
Ben je pense bien mais je ne vois pas vraiment où ... j'ai essayé comme ceci:
$lien = '<a href="'.htmlspecialchars($href).'"'.
							((!$lang) ? '' : ' hreflang="'.htmlspecialchars($lang).'"').
							((!$title) ? '' : ' title="'.htmlspecialchars($title).'"').
							((!$rel) ? '' : ' rel="'.htmlspecialchars($rel).'"').
							' target="_blank">'.htmlspecialchars($label).'</a>';
mais sans résultat !

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Avatar du membre
ViPHP
ViPHP | 3008 Messages

20 avr. 2007, 21:47

C'est bizarre quand on regarde ta source, apparemment ce n'est pas du tout ce HREF qui est pris en compte puisque je ne vois nulle part hreflang, ni title, ni rel...

Es-tu sûr que c'est cette fonction ?

Mammouth du PHP | 545 Messages

21 avr. 2007, 09:42

Es-tu sûr que c'est cette fonction ?
Non et sur le site le forum de Dotclear personne ne sait me répondre !
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 avr. 2007, 11:51

dcBlogroll::linkList();
L'appel à la fonction se fait de manière statique ( :: ), dcBlogroll n'est donc pas une instance, mais normalement le nom de la classe. Hors ici, c'est le code source de la classe linkSwitcher que tu nous montre.

As-tu un fichier contenant la classe "dcBlogroll" ? elle doit également contenir une fonction linkList() ...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 545 Messages

21 avr. 2007, 15:56

As-tu un fichier contenant la classe "dcBlogroll" ? elle doit également contenir une fonction linkList() ...
Effectivement, c'est de là que venait mon erreur ... pas le bon fichier, donc pas la bonne fonction ! Voici le bon code déjà corrigé:
class dcBlogroll
{
	/*
	Cette fonction affiche la liste des liens (blogroll)
	
	@proto function dcLinkList
	@param string  block Chaine de substitution pour pour la liste ('<ul>%s</ul>')
	@param string  item  Chaine de substitution pour un élément ('<li>%s</li>')
	*/
	function linkList($category='<h3>%s</h3>',$block='<ul>%s</ul>',$item='<li>%s</li>')
	{
		global $con, $blog;
	
		if (($rs_link = $con->select(
			' SELECT label, href, title, lang, rel FROM ' . $blog->t_link
			. '  ORDER BY position')) !== false) {
			$res = '';
			
			while (!$rs_link->EOF()) {
				$label = $rs_link->f('label');
				$href  = $rs_link->f('href');
				$title = $rs_link->f('title');
				$lang  = $rs_link->f('lang');
				$rel = $rs_link->f('rel');
				
				if (! $label && ! $href) {
					if ('' != $res) {
						printf($block,$res);
					}
					printf($category, $title);
					$res = ''; 
				} else {
					
					$link =
					'<a href="'.htmlspecialchars($href).'"'.
					((!$lang) ? '' : ' hreflang="'.htmlspecialchars($lang).'"').
					((!$title) ? '' : ' title="'.htmlspecialchars($title).'"').
					((!$rel) ? '' : ' rel="'.htmlspecialchars($rel).'"').
					'target="_blank">'.
					htmlspecialchars($label).
					'</a>';
					
					$res .= sprintf($item,$link);
				}
				$rs_link->moveNext();
			}
			if ('' != $res) {
				printf($block,$res);
			}
		}
	}
}
?>
Je vous remercie tous pour cette aide très précieuse ... MERCI
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!