Maxime Millet

Inclure des fichiers dans les templates de blogotext

14/08/2013 | Aucun commentaire |

La plupart des moteurs de template possèdent un telle fonction, celle de pouvoir inclure d'autres fichiers dans le template ou d’exécuter le code php qui se trouve dedans. Cela permet d'avoir un seul fichier pour l'header, le menu et le footer pour l'ensemble du site, je n'ai rien trouvé de telle dans blogotext (peut être dans une future version ? :-) ) donc j'ai bricolé une solution.

Pour cela, il faut avoir le fichier them.php qui se trouve dans le répertoire inc.

Après la ligne 82 (c'est à dire à la fin du tableau de déclaration des balises) il faut ajouter :

'include' => '{include}',

Ensuite il faut rajouter après le ligne 96 (dans la fonction conversions_theme) le code permettant de remplacer chaque occurrence de la balise par le contenu du fichier.

if(preg_match_all("/{include}(.*){\/include}/i",$texte, $includes)>0)
{
foreach($includes[1] as $file)
{
$balise="{include}$file{/include}";
ob_start();
if(!@include($file)) echo str_replace($balise,"Le fichier <i>$file</i> est introuvable", $texte);
$content=ob_get_clean();
$texte=str_replace($balise,$content, $texte);
}
}

Et pour l'utiliser c'est très simple: {include}/home/foo/public_html/header.php{/include}
Notez qu'il faut faire attention à l'include_path ;)

Et ça fonctionne aussi dans les articles pour inclure d'autres pages mais attention j'ai pas essayé ce qu'il se passe si on poste un commentaire contenant la balise !

Un sitemap pour blogotext

10/08/2013 | |

Voilà un petit code pour faire un sitemap des articles de blogotext, ce code marche pour les nouvelles version seulement car quand j'ai mis le mien à jour j'ai du refaire le code.

<?php
header('Content-Type: text/html; charset=UTF-8');
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n";
?>
<url>
<loc>http://localhost</loc>
<lastmod><?php echo date('Y-m-d'); ?></lastmod>
<changefreq>always</changefreq>
<priority>1.0</priority>
</url>
<?php
$GLOBALS['BT_ROOT_PATH'] = '';
error_reporting(-1);
$begin = microtime(TRUE);
require_once 'config/user.php';
require_once 'config/prefs.php';
require_once 'inc/lang.php';
require_once 'inc/conf.php';
require_once 'inc/them.php';
require_once 'inc/fich.php';
require_once 'inc/html.php';
require_once 'inc/form.php';
require_once 'inc/comm.php';
require_once 'inc/conv.php';
require_once 'inc/util.php';
require_once 'inc/veri.php';
require_once 'inc/jasc.php';
require_once 'inc/sqli.php';
$GLOBALS['db_handle'] = open_base($GLOBALS['db_location']);
$query = "SELECT bt_date,bt_id,bt_title,bt_link FROM articles WHERE bt_date <= ".date('YmdHis')." AND bt_statut=1 ORDER BY bt_date DESC";
$liste=liste_elements($query, array(), 'articles');
foreach ($liste as $billet)
{
$item = '<url>'."\n";
$item .= ' <loc>'.$billet['bt_link'].'</loc>'."\n";
$item .= " <lastmod>$billet[annee]-$billet[mois]-$billet[jour]</lastmod>\n";
$item .= ' <changefreq>yearly</changefreq>'."\n";
$item .= ' <priority>0.8</priority>'."\n";
$item .= '</url>'."\n";
echo $item;
}
?>
</urlset>

SyndExport en version 2

26/05/2013 | |

SyndExport est un parser de flux rss et atom que j'ai développé l'année dernière pour pouvoir assembler plusieurs flux entre eux. Il n'y a rien d'extraordinaire dans son fonctionnement, la classe utilise un objet SimpleXML pour retourner les informations et les entrées du flux sous la forme d'un array (ou en JSON).

C'est à la base une classe qui devait rester pour mon usage perso mais comme je n'ai pas trouvé de parser léger j'ai décidé de publié le mien et comme RSS et Atom sont flexibles on peut l'utiliser pour faire un tas de chose comme un agrégateur de flux, l'utiliser pour mettre à jour une carte méteo en temps réel, pour afficher sur son blog les dernières musiques écoutées... ;o

Dans cette version j'ai modifié le constructeur de l'objet pour que le premier objet soit l'url du flux, s'il s'agit du contenu du flux il faut ajouter un deuxième paramètre valant false ce qui est plus souple que dans les versions précédentes ou il fallait utiliser file() ou file_get_contents() avant de créer l'objet.

Donc si je souhaite récupérer les dernières musiques que j'ai écouté sur spotify (via lastfm) c'est très simple il me suffit d'écrire :


<?php
include("syndexport.php");
$user="moi";// nom d'utilisateur lastfm -> il faut avoir activé l'api
$flux = new SyndExport("http://ws.audioscrobbler.com/1.0/user/$user/recenttracks.rss");
$nbr=5; // nombre de musiques à extraire
$last=$flux->exportItems(5); // extractions des entrées
if($nbr<=$flux->countItems())for($i=0;$i!=$nbr;$i++)
{
echo '<a href="'.$last[$i]["link"].'"><h3>'.$last[$i]["title"].'</h3></a>'."\n";
}
?>

Ce qui donne ceci ;-)

SyndExport version 2.0

SyndExport : classe PHP pour parser des flux ATOM et RSS

09/07/2012 | |

SyndExport 1.0SyndExport est ma classe PHP maison pour parser un flux RSS ou un flux ATOM. Il existe déjà des parsers qui sont surement plus puissants que le mien, mais pour mes usages, ils sont trop lourds. SyndExport permet d'extraire les informations du flux (comme le titre, la description, le lien etc) et les items afin de les exporter en tableau PHP ou en JSON pour intérargir directement avec vos objets javascript.

Le type de flux (rss ou atom) peut être détecté automatiquement si vous ne le connaissez pas.

Télécharger la version 1.1

Documentation

Vous devez vous assurer que votre serveur PHP supporte l'API SimpleXML.

Documentation SyndExport

Site web de SyndExport

Licence Creative Commons BY-SA 3.0

MySQL/PHP récupérer l'id du dernier enregistrement

18/12/2011 | Commentaires fermés |

Il y a peu de temps, je séchais pour résoudre un problème tout simple que j'ai rencontré sur un projet, comment récupérer l'id de l'enregistrement sql que l'on vient de faire ? Sachant que je ne connais pas et je ne souhaite pas savoir le nombre d'enregistrements qu'il y a dans ma table, que cet ID ne peut être basé sur le timestamp et qu'il n'est du coup pas possible de le stocker avant la requête.

Après une petite recherche dans la doc PHP j'ai trouvé ça : mysql_insert_id()

Exemple d'utilisation :

mysql_query("INSERT INTO `clients` (`id`, `nom`, `prenom`, `mail`) VALUES (NULL, '".$nom."', '".$prenom."', '".$mail."');");
$id=mysql_insert_id();
echo "Le client porte l'id : $id";

[PHP] Forcer le register_globals sur off chez OVH et les autres

01/05/2011 | Commentaires fermés |

Aujourd'hui, j'ai testé la nouvelle version de drupal, la 7 sur mon hébergement mutualisé de chez OVH. Quelle fut ma surprise lorsque le script d'installation m'indique que la variable globale php REGISTER_GLOBALS est sur on (ou 1). Ce n'est pas la première fois que je le constate, déjà sur des forums tel que commentcamarche.net les webmasters se posent la question comment mettre REGISTER_GLOBALS sur Off ? Voici la solution :

A la racine de votre hébergement, créez le fichier .htaccess s'il n'existe pas encore. Dans ce fichier ajoutez y la ligne suivante :

SetEnv REGISTER_GLOBALS 0

Et voilà c'était pas très dur 8-) !

Générer un NIC Handle avec une fonction php

13/01/2011 | Commentaires fermés |

Qu'est-ce que le NicHandle ?

Le NicHandle est un code généralement utilisé chez les registars pour identifier un client. Il est composé de la première lettre du nom et du prénom de l'utilisateur suivie d'une suite de 4 ou 5 chiffres et enfin votre marque.

Cet identifiant est pour moi plus sûr qu'un pseudonyme (pour un site professionnel ou commercial) même si ce n'est pas la sécurité parfaite ;-).

Le code

J'ai récemment dû mettre en place un système d'identification pour gérer un "caddie virtuel" et j'ai opté pour cette solution. La fonction a besoin de mysql pour chercher si le NIC existe déjà. Si vous supprimez la requête n'oubliez pas de faire pareil avec la boucle while qui ne servira plus à rien.

function Gnich($nom,$prenom)
{
while($verif != 1)
{
$id = rand(10000, 99999);
$n = substr($n, 0, count($nom));
$p = substr($p, 0, count($prenom));
$id = "$n$p$id";
$cherche=mysql_query("SELECT * FROM users WHERE nic = '$id'");
if(mysql_num_rows($cherche) != 1)
{
$verif = 1;
}
$id = $id."-MARQUE";
}
return $id;