Bonjour,
J'aimerai avoir un petit peu d'aide pour avancer dans mon travail.
L'objectif est d'afficher des liens depuis un fichier <!DOCTYPE NETSCAPE-Bookmark-file-1> (c'est un export de Shaarli). En gros, j'essaie d'intégrer les données de Shaarli dans mon site.
Jusque là j'arrive à retrouver le contenu (j'ai repris le code pour l'import de Shaarli). Maintenant, je souhaiterai générer un pagination et limiter le nombre de résultats par page.
C'est la que je bloque, je ne sais pas trop comment ajouter des contraintes a ma boucle foreach.
J'ai cherché mais je bloque, je manque encore d'habitude avec PHP et pas facile de trouver de l'aide tant les résultats sont nombreux et les explications parfois succinctes pour moi.
Modifié par le-noob (11 Aug 2015 - 10:57)
J'aimerai avoir un petit peu d'aide pour avancer dans mon travail.
L'objectif est d'afficher des liens depuis un fichier <!DOCTYPE NETSCAPE-Bookmark-file-1> (c'est un export de Shaarli). En gros, j'essaie d'intégrer les données de Shaarli dans mon site.
Jusque là j'arrive à retrouver le contenu (j'ai repris le code pour l'import de Shaarli). Maintenant, je souhaiterai générer un pagination et limiter le nombre de résultats par page.
C'est la que je bloque, je ne sais pas trop comment ajouter des contraintes a ma boucle foreach.
<?php
$files="data/medias/bookmarks_shaarli.html";
$data=file_get_contents($files);
// 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
{
// 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
{
$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)
preg_match('!<A .*?>(.*?)</A>!i',$d[0],$matches);
$link['title'] = (isset($matches[1]) ? trim($matches[1]) : ''); // Get title
$link['title'] = html_entity_decode($link['title'],ENT_QUOTES,'UTF-8');
preg_match_all('! ([A-Z_]+)=\"(.*?)"!i',$html,$matches,PREG_SET_ORDER); // Get all other attributes
$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');
elseif ($attr=='TAGS') $link['tags']=html_entity_decode(str_replace(',',' ',$value),ENT_QUOTES,'UTF-8');
elseif ($attr=='PRIVATE') $link['private']=($value=='0'?0:1);
elseif ($attr=='ADD_DATE') $raw_add_date=intval($value); $link['linkdate']=date('d/m/Y',$raw_add_date);
}
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."; }
?>
J'ai cherché mais je bloque, je manque encore d'habitude avec PHP et pas facile de trouver de l'aide tant les résultats sont nombreux et les explications parfois succinctes pour moi.
Modifié par le-noob (11 Aug 2015 - 10:57)