Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

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

Voici ce que j'aimerais faire :

1383128183.png

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

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


Et voici le résultat du var-dump :

1383128281.png

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

Une petite preview :
1383138953.png

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,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAyAAAAMgCxEE/eAAAKj0lEQVRo3s2ayXNU97XHP+d3Wy2pJVqz1JKQhBASEsICE+OJEGNjv4Ad6jnx4lU9u7LKItvsH1Xs3h/wklWqUqlUJZWqxMnCiY1jExsPpLAxgxGDrAF1g4TmqdHQat173uK0kACJwZDGp0rVqt/t++vzPb8zfu+VxdefV24XcaAK3HnpuyqhNVc1eNx63Z9oxtAi6wD5LspqDxEBF4KcMAQ+pBe/S0DU9NRV7iwCzoOcEOQXIIVRKC6F8iqkMoYUl6Izk+iZLwjheeD7j1H/jOJeCHLDkJuPbChCSkqhrHJF6bIKKCmHaBGSF4HcXLsnvYg+/QNC0tiM9nbdaoksilTGoGU7rqYOKmJIeSWUlCHRYijYAOGwncxq4IspdGoSbiShuATZ3ELIvfoG/h9+DaPDt96QDcnJQV45hDv4hlnZ81Z0UIV0Gk3OwGwSnRyDsWEYuo4ODaBjQzA9hbTvxL3+JiG3+/toz2WCo3+FIMvZyl+C0RFEBEIhC5ORIejrQkeH0ZFBdHQYxkbQ6UmYTcJiCpaWDKiqXUcQVVXtvsTSr/4X+nuyeyqqUFSC99bPcS8ehFCI4OQnBL/9JTo+Cum0lQLVFb3W0i8vDwcgjc24fQcgEslurIjA9CTBe2+j3Rdtaet2aNthCUiDTOZy9rmekefnDQihEO7ZfUjbzuzHiQga7yV47y/o5BhSXIr32hvI1vYH2sORXrT/q6pxLx+yFJftDOb7BF9+RvDRe5BKIZtb8A79F1TE7lsXF5w5CUtpEEE6diFP77HskU0Rgfk59MO/E3SeBnHIk8/iXnoV8vLvC4x3uLrgiDS1IsWlSDgXiRabv06OZ9fNRODGDDIzhbS0IyVlSKwGHR2Cawnu1cB6h6siR4gU4lq3gxcyIKkFtKvz5kllTVTRiVEklIM0t5lxS8qtYN/DsN7h5uojTI0jTa1WZT0PKatA430wNJA9EGCK+j46fB0pr0TqN1ulD4fNS+bn1gXjHW6rP8Js0iK/rQNy85BIoTVqF8/d9eZ/G5iFWZgYR7a0IaUVSGU1zM6gV76xtLyGPt7h1rojqKKT40h1HVLfaIFfWo6Oj6L9PY+hDxOYGoelNK6lHaLFFi8DiTu9JFPhDYgIzM9Dah7ZthMpKIRwLhKNol0Xsh/4AEFg7Ue0CLe5BSkqgWgxdF+C6UlALbsWFCIVVRkgBg0mJ6CkDLelFZxDikpWBf5S9l0stQAj15G6RiRWi5RVgufQ5DSypQ333Au4Vw7hXjm0arDK+KYefx9t34k0bYWcMG7PfvT8afTsyX+/8jddWI03CIfR2SRB5xm8lnbIj+Beeg3Z9SwURJGCAptJuGNmFzTRR/DpB3i1dZAXQSqrcS+9ih/vhYmxR3sqGf8GrJ/KzYOCDUhFJVJTjzRsho2bkNoGm0sA8iNIfmRlj3Qa5mdvAyJiE9eJj9COpwy5CG7nM+juMwQfvvNwrf7tY2xevgVyZQyprYeGJlxtA8RqbbDKy7OTuXUTWFyEuVmCvm/QC2fQa/E1ZnYRdGwY/+OjeE1bLcg2RHEvHkQvnkOvXrn/U1m2uIgFZm7eiuL1TUjDZqS2DspjyIYiu+7cnXtkJkIdGoD5WUvByWmCC2fRU5/D3Ow65EMQoGe/IPjqBN6+A+A8ZEsr8sIP0T//DhbWqy260kl4IYgU2OxdVWMBW98INQ24yiobY0M5d+6jCqkFdGYKhgcJrvbDlW400YcOX4dIAa7je1BcasWyoQnt7VoHiAjMTKEfv4+2diA1dRDKwT3/Itp5xgJ/mZ7RzPdDxnRQWo6rroX6JqRuk91bWoEUrqN4xs91dgaGr6NX+9G+b9BrV2Bo0AAtLmRc2vQKokW4fT9EYhuRth0Ex/52dzpIuzrRz48hP34TQjlIrBb38o/wE71wYwYKo0hZhQVmfSPUNdrmJWU2pHnrbJ9OozdmYHzEFL/Sjcb70KFrMDNlaXeZ2VkeqJZjJfDhaj+kUtaJhMNIrHo9IBn/WJjH//QDpON7yNYnwDnczt3wxk8hvQj1jUhVDVJcCpGCNQKTlR+fm7VO4Voc7e9B4z3o4FUrtvNz9h0EBPt06+wlYmTEP99FG1tMt/qm24AsB6fnQU6O/S2mCC534m1qMS6pMIo78Lr92Hpzi+/D/Cw6OYEOJtB4r1l9MGEpfG7OOuu1LH4/IlYm/Hf+iFcZQ2K1hAgCQ5+Xj0SLoGqj+XZRMToxDiHPgn98xPwd7nQZVTS1AFMTMJAgiPdBvJvgWsIonNmkdQarreoeQPE1nUbRc6cIPngH7ydvEZKn9yI1dcimJqS2HimvgsIoBD7B2S/RRK9lkURvpqXOXdlseorgah/095jFE/3GN91Imustp967EQffVkTMWz4+ah1yMD2pkh8xQvh20EMDBKdOQHIacnNxu55DGppuKhV8fQr/N/8HA/EVxVe7SzZEBCmrxEm0eE0QpNOIF7JBJ96DnvyE4N230Ymxm19xGzchGxtWJknnVqibbIkqOja8Kth9H51LGqs3kLA5pL8HTVxBJ8dhaREdvGrDzss/MoVLy/Fefo2l7oswPJj9Vn+VhDTei44MQl83QbwXBhLGs87NrgSoCCCQTBJ8+g/kiV1I9Ua71NqBe+YHBO++bRToYxLvf/zxI8EnH6Bnv4BEr2WexdStgbosojA1aaTAljZLv6Ecy3DfXICJ0cd2Kk7jvZCcsoIk9/JxgdQ8wWfH0ETfymrdZmTvf1iL8pgeTzjL5w9iRUETvfiffggLC7aUk4N7fh+ybcfjO5EHvkPEeqWTxwl6Lq0sV8Rw+w4gRcXZOxVVayZVvwWQZTDDg+jxo1ZjMmtu59PwVBYo1+X4LdiANLfiXjr4EA9DfR89fZJg13O4Z1+wjTcU4e07yNLl89ahPmwbslpxzczx+fnGczVvw7U9YeWgvOohgDiHTo4SfHzUuKeyCgCkuQ23Zz/BX3/PMtP/rZUHM1CkAKmoQppaYdtO3JZWA5MfuRmTD/d4OlC08zTBV//CLRfJ3Dzc3v3o16fQy1/zQIlk9Wicm4dUxJCmrUj7k8YFV9XcovxqeTggIjB7g+D4+0j7DmM7AKmpx714EH8gDjPT985ky9bPyzfuqmkrrq3DWPlYDUQK199jYR6dnnw0LwxozyX0xEfIf/630TbOQ3bvQc5/hX527O6WD+daV93YgrTvwDVvg5p6JFKwvvJLaXR8zDruztN3mdkf9FRSCwSfHUM6nrJngICUlOP2v4bfdRFGMn1YkHkmGA7bHL9pC277k9DSjovVQuEGe9NhLfF9SE6h8SsEF07DhXMEA3HLmktLj+gVDhH0Wj/B8ffx6hpt7AVc2w50736Cv/3JOofScmRTM661A2l7wlyxsHD96VAD9EYSBuIElzvRztPGqExNZPq6zGjs3CN8F8X3Cb78HHnyGdzuPfYjuXn2XDIctp6sZTuyscHIt/Vqjar5/ch19PJ5ggtnoLcLHRuGVGrFC24DL2u+r/Uwh/PMXryf/cImzVUg7zreLnNZY8Nobxd6/iu0+xI6PAgL83b9HjXp0b4dpIpeOId2nkH2HVhZv1ul933jm0+dQM9+YUzmjelMPLn7njb/H1hXjhSbwGyuAAAAJXRFWHRjcmVhdGUtZGF0ZQAyMDEzLTEwLTA2VDE3OjI4OjI3KzAwOjAwOomcAAAAACV0RVh0bW9kaWZ5LWRhdGUAMjAxMy0xMC0wNlQxNzoyODoyNyswMDowMGU46jQAAAAASUVORK5CYII=";
$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