8768 sujets

Développement web côté serveur, CMS

J'essaie d'afficher des bookmarks (export depuis Shaarli) mais je souhaiterai en plus pouvoir effectuer un tri par tag.

A partir des résultats affichés, j'aimerai qu'on puisse filtrer en fonction des tags présents.
Si je vérifie si la balise tags contient le terme, je risque de me retrouver avec des pages vides (à cause de la pagination).
Je sais pas s'il existe un moyen de faire ça sans devoir tout modifier.

<?php 

// nom du fichier a lire >> A MODIFIER
$files="data/medias/bookmarks_shaarli.html";
$data=file_get_contents($files);
// echo $data; // affiche le contenu du fichier


// Tells if a string start with a substring or not.
function startsWith($haystack,$needle,$case=true)
{
    if($case){return (strcmp(substr($haystack, 0, strlen($needle)),$needle)===0);}
    return (strcasecmp(substr($haystack, 0, strlen($needle)),$needle)===0);
}

// Tells if a string ends with a substring or not.
function endsWith($haystack,$needle,$case=true)
{
    if($case){return (strcmp(substr($haystack, strlen($haystack) - strlen($needle)),$needle)===0);}
    return (strcasecmp(substr($haystack, strlen($haystack) - strlen($needle)),$needle)===0);
}



$type='unknown';
if (startsWith($data,'<!DOCTYPE NETSCAPE-Bookmark-file-1>'))  $type='netscape'; // Netscape bookmark file (aka Firefox).

// Then import the bookmarks.
if ($type=='netscape') // le format est OK et on peut importer
{      //  echo "Le format est OK (type=netscape) et on peut importer.";

$url="static4/shaarli?page"; 
 $nb_elem_per_page = 3;
 $page = isset($_GET['static4/shaarli?page'])?intval($_GET['static4/shaarli?page']-1):0;
  $data =  (explode('<DT>',$data)) ;
  $number_of_pages = intval(count($data)/$nb_elem_per_page)+1;

		// This format is supported by all browsers (except IE, of course), also delicious, diigo and others.
		// foreach(explode('<DT>',$data) as $html) // explode is very fast

 foreach (array_slice ($data, $page*$nb_elem_per_page, $nb_elem_per_page) as $html)
		{
				// echo "$html  <hr />";
				//       if (startswith($html,'<A '))  { echo "$html  <hr />"; }

				$link = array('linkdate'=>'','title'=>'','url'=>'','description'=>'','tags'=>'','private'=>0);
				$d = explode('<DD>',$html);
				if (startswith($d[0],'<A '))
						{
									$link['description'] = (isset($d[1]) ? nl2br (html_entity_decode(trim($d[1]),ENT_QUOTES,'UTF-8')) : '');  // Get description (optional)
									// echo "Description : ".$link['description']; // affiche la description de l'item

									preg_match('!<A .*?>(.*?)</A>!i',$d[0],$matches); 

									$link['title'] = (isset($matches[1]) ? trim($matches[1]) : '');  // Get title
									// echo "Title : ".$link['title']." <hr />";  // affiche le titre de l'item
								    $link['title'] = html_entity_decode($link['title'],ENT_QUOTES,'UTF-8');
									// echo "<br><span style=\"color:brown\">Title : ".$link['title']." </span>";  // affiche le titre de l'item

									preg_match_all('! ([A-Z_]+)=\"(.*?)"!i',$html,$matches,PREG_SET_ORDER);  // Get all other attributes
									// echo "matches : "; var_dump ($matches) ; echo " <hr />";
									
									$raw_add_date=0;
									
									
									foreach($matches as $m) 
												{ 
													$attr=$m[1]; $value=$m[2];
													if ($attr=='HREF')  $link['url']=html_entity_decode($value,ENT_QUOTES,'UTF-8');
													// echo 'url : '.$link['url'].'<hr />';

													elseif ($attr=='TAGS')   $link['tags']=html_entity_decode(str_replace(',',' ',$value),ENT_QUOTES,'UTF-8');
													//  echo "tags : ".$link['tags']." <hr />";
													elseif ($attr=='PRIVATE')  $link['private']=($value=='0'?0:1);
													//  echo "private : ".$link['private']." <hr />";
													elseif ($attr=='ADD_DATE')         $raw_add_date=intval($value); $link['linkdate']=date('d/m/Y',$raw_add_date);
													//  echo "linkdate : ".$link['linkdate']." <hr />";
											
												}

											echo "<br><span style=\"color:brown\">Title : ".$link['title']." </span>";  // affiche le titre de l'item
											echo "<br>Description : ".$link['description']; // affiche la description de l'item
											echo "<br><span style=\"color:green\">url : ".$link['url']." </span>";
											echo "<br><span style=\"color:red\">tags : ".$link['tags']." </span>";
											echo "<br><span style=\"color:blue\">private : ".$link['private']." </span>";
											echo "<br><span style=\"color:silver\">linkdate : ".$link['linkdate']." </span><hr />";



					}	$i++;
			}
}

else { echo " has an unknown file format. Nothing was imported."; }
?>

<ul id='paginator'>
<?php
for($i=1;$i<$number_of_pages;$i++){ ?>
    <li><a href="index.php?<?php echo $url.'='.$i ; ?>"><?php echo $i ; ?></a></li>
<?php } ?>
</ul>