#1 Le 30/10/2013, à 11:38
- foozrr
[PHP] Une manière plus élégante de lister mes projets ?
Bonjour la communauté,
C'est mon tout premier post, je vais essayer de ne pas le foirer.
Voici ce que j'aimerais faire :
C'est lister tous mes projets web de manière plus sympa que le bête listing fait par apache.
Pour ce faire il me faut :
- l'url de l'index
- l'url de la favicon
- le nom du dossier
- [Par après] une miniature de l'index du projet
Voici mon code php qui marche (pas de css), mais qui n'est pas très élégant.
Je n'ai que 2-3 mois de PHP dans le ventre et je me suis déjà cassé la tête pour pondre le code PHP ci-dessous.
<?php
// get list of all root directories
$directories = glob('*', GLOB_ONLYDIR);
// create a "projects" array to handle each project
$projects = array();
for ($i = 0; $i < count($directories); $i++) {
// create a "project" array
$project[$i] = array();
// push the name
array_push($project[$i], strtoupper($directories[$i]));
// check if "/public/index.php" exists (Laravel 4)
if (file_exists($directories[$i] . '/public/index.php')) {
// push the index url
array_push($project[$i], $directories[$i] . '/public/index.php');
// push the favicon url
array_push($project[$i], $directories[$i] . '/public/favicon.ico');
}
// check if "/web/app-dev.php" exists (Symfony 2)
elseif (file_exists($directories[$i] . '/web/app-dev.php')) {
// push the index url
array_push($project[$i], $directories[$i] . '/web/app-dev.php');
// push the favicon url
array_push($project[$i], $directories[$i] . '/web/favicon.ico');
}
// else it is from scratch
else {
// push the index url
array_push($project[$i], $directories[$i] . '/index.php');
// push the favicon url
array_push($project[$i], $directories[$i] . '/favicon.ico');
}
array_push($projects, $project[$i]);
}
var_dump($projects);
?>
Oui je compte me mettre à Symfony2 et Laravel4 plus tard.
Et voici le résultat du var-dump :
Il serait peut-être plus élégant de faire un tableau associatif pour chaque "project" ?
Que feriez-vous et comment le feriez-vous ?
Merci d'avance !
Dernière modification par foozrr (Le 30/10/2013, à 11:53)
Hors ligne
#2 Le 30/10/2013, à 12:45
- Epehj
Re : [PHP] Une manière plus élégante de lister mes projets ?
Salut,
Si tu veux faire un tableau associatif, il faut changer ta boucle :
for ($i = 0; $i < count($directories); $i++)
Tu dois par exemple pouvoir faire un foreach sur $directories pour itérer sur les noms des dossiers
foreach($directories as $folder ){
$projet[$folder] = array();
}
Voila pour l'idée
Pour les autres questions, ben je sais pas, je fais pas de web ! (D'ailleurs je ne me souviens plus de la syntaxe de foreach en php, c'est de mémoire)
En tout cas là tu as tous les éléments pour faire ce que tu veux, il te reste plus qu'à faire une petite mise en page avec un coup de css
Dernière modification par Epehj (Le 30/10/2013, à 12:46)
Linux user #447629 - Ubuntu user # 21770
C'est en sciant que Léonard devint scie
Hors ligne
#3 Le 30/10/2013, à 14:01
- foozrr
Re : [PHP] Une manière plus élégante de lister mes projets ?
J'avais eu un problème avec un foreach, alors j'ai utilisé un simple for.
Je vais le refaire avec ta solution.
Sinon j'ai fais ma mise en page, en responsive pas super propre (je viens de m'apercevoir du problème avec les media queries).
J'ai ajouté des favicons par défauts en base64.
Voici le code complet sans tableau associatif, mais avec css (c'est un peu différent de mon mockup) :
<?php
// get list of all root directories
$directories = glob('*', GLOB_ONLYDIR);
// create a "projects" array to handle each project
$projects = array();
// base64 images
$laravelImg = "data:image/png;base64,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";
$symfonyImg = "data:image/png;base64,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";
$defaultImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wBDwY2L+prn4wAAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAAAF5JREFUaN7t2jEOwCAMxdAPF4+4eXeGirGkzxtSFi8xQ0aSyjtre9fH5s4HLqBmmkCECJGfiAA4yLsvivVLhAgAZVd265cIEQDKruw6QoQIAGVXdiJEiHQTGWlyePYAJ8EOLfB3R0kAAAAASUVORK5CYII=";
for ($i = 0; $i < count($directories); $i++) {
// create a "project" array
$project[$i] = array();
// push the name
array_push($project[$i], strtoupper($directories[$i]));
// check if "/public/index.php" exists (Laravel 4)
if (file_exists($directories[$i] . '/public/index.php')) {
// push the index url
array_push($project[$i], $directories[$i] . '/public');
// push the favicon url
if (file_exists($directories[$i] . '/public/favicon.ico')) {
array_push($project[$i], $directories[$i] . '/public/favicon.ico');
}
else {
array_push($project[$i], $laravelImg);
}
}
// check if "/web/app-dev.php" exists (Symfony 2)
elseif (file_exists($directories[$i] . '/web/app-dev.php')) {
// push the index url
array_push($project[$i], $directories[$i] . '/web/app-dev.php');
// push the favicon url
if (file_exists($directories[$i] . '/web/favicon.ico')) {
array_push($project[$i], $directories[$i] . '/web/favicon.ico');
}
else {
array_push($project[$i], $symfonyImg);
}
}
// else it is from scratch
else {
// push the index url
array_push($project[$i], $directories[$i] . '/');
// push the favicon url
if (file_exists($directories[$i] . '/favicon.ico')) {
array_push($project[$i], $directories[$i] . '/favicon.ico');
}
else {
array_push($project[$i], $defaultImg);
}
}
// push a random hexa color
array_push($project[$i], substr(md5(rand()), 0, 6));
array_push($projects, $project[$i]);
}
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Lamp Start Page</title>
<meta name="viewport" content="width=device-width, user-scalable=yes" />
<style>
body {
max-width: 940px;
width: 96%;
margin: 2% auto;
font-family: "Arial", sans-serif;
}
div {
width: 31.3333%;
float: left;
height: 80px;
position: relative;
overflow: hidden;
margin: 1%;
}
a {
width: 100%;
height: 40px;
display: block;
position: absolute;
bottom: 0px;
left: 0px;
padding-left: 80px;
background: rgba(0, 0, 0, 0.15);
line-height: 40px;
color: #FFFFFF;
text-decoration: none;
font-weight: 700;
font-size: 16px;
}
img {
position: absolute;
bottom: 15px;
left: 15px;
width: 50px;
background: #FFFFFF;
}
.clear {
clear: both;
display: block;
}
@media (max-width: 880px) {
body {
width: 96%;
}
div {
width: 48%;
}
}
@media (max-width: 600px) {
div {
width: 98%;
float: none;
}
}
</style>
</head>
<body>
<? foreach($projects as $p):?>
<div style="background: #<?= $p[3] ?>">
<a href="<?= $p[1] ?>"><?= $p[0] ?></a>
<img src="<?= $p[2] ?>" alt="<?= $p[0] ?>"/>
</div>
<? endforeach ?>
<span class="clear"></span>
</body>
</html>
Dernière modification par foozrr (Le 30/10/2013, à 15:43)
Hors ligne