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.
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>