Un petit site web pour partager son savoir faire et recueillir les compétences de chacun.
- Prérequis
- PHP 5.5
- MySql > 15.x ou MariaDB > 5.x
- Module Apache-APC
sudo yum install httpd php mariadb php-apc
pour Fedora.
Pour Ubuntu / Debian based, les packages devraient sensiblement etre les memes, remplacer
yum
parapt-get
.
- Installation
- Il faut cloner le déport de Muffin ansi que les sous modules associés
# clone du depot avec mise a jour automatique des sous-modules
git clone --recurse-submodules [email protected]:WeAreMuffin/Muffin.git
- Ensuite, configurer l'acces à la base de données en éditant le fichier d'exemple
Muffin/Config/configuration.yml.sample
. Une fois les identifiants de connexion à la base de données définis, enregistrer le fichier sous le nomMuffin/Config/configuration.yml
.
# copie du fichier d'exemple de configuration
cp Muffin/Config/configuration.yml.sample Muffin/Config/configuration.yml
# édition du fichier de configuration réel
vim Muffin/Config/configuration.yml
- Enfin, il faut importer la base de données et ajouter des données d'exemple.
La strucure vide de la base de données est disponible dans le fichier
Muffin/database.sql
. Pour des raisons de confidentialité évidentes, il n'y a que la structure.
Pour importer la base de données, il est conseillé d'effectuer l'import en ligne de commande, même si il semble peut être plus confortable de passer par une interface graphique comme PhpMyAdmin.
- Pour les développeurs
├── Config // Contient tous les fichiers de configuration
├── Controllers // Contient les Contrôleurs correspondant aux urls
├── Libs // Les librairies php annexes
└── Vues // Les templates html correspondant aux controlleurs
Lorsque une url est appelée, le routeur appelle automatiquement la méthode du contrôleur correspondant. Par exemple, si on demande l'url User/p
, c'est la méthode p ()
de la classe User
(Qui se trouve dans Controllers/User.php
) qui sera appelée. Si il n'y a que le nom de la classe dans l'url, c'est par défaut la méthode index ()
qui est appelée.
Par exemple, l'url Notification/getCount
va apeller la méthode getCount ()
de la classe Notification
(Situé dans Controllers/Notification.php
) :
class Notification extends Controller
{
// ...
public function getCount($params)
{
if (isset ($_SESSION['login']))
{
$cpt = new Entities('c_notifications[id_user="'.$_SESSION["muffin_id"].'"][vu=0]');
echo (count($cpt));
}
else
echo "0";
}
// ...
}
Cette méthode affiche simplement le nombre de notifications non-lues de l'utilisateur.
Les vues sont codées en twig, un moteur de Template pour PHP. Si vous n’êtes pas familiers avec Twig, je vous invite à lire la documentation très complète.
À chaque méthode d'une classe Contrôleur peut correspondre une vue, qu'il est ensuite possible d'appeler depuis le contrôleur avec la méthode $this->render ()
.
Les vues sont situées dans le répertoire Vues/
, et sont nommées sous la forme classe.methode.twig
.
Pour passer des variables à la vue depuis un contrôleur, on utilise la méthode $this->addData ("nom_a_donner", $variable)
dans le contrôleur.
Par exemple, la méthode get ()
du contrôleur Notification
(Controllers/Notification.php
) permet d'afficher la liste des notifications de l'utilisateur.
Le contrôleur va récupérer toutes les notifications, les ajouter à la Template sous le nom notifications
, va mettre à jour toutes les notifications de l'utilisateur en les marquant comme lues, et va afficher la Template correspondante (qui correspond donc à notification.get.twig
, présente dans le répertoire Vues
).
class Notification extends Controller
{
// ...
public function get($params)
{
if (isset ($_SESSION['login']))
{
// récupérer toutes les notifications
$cpt = new Entities('c_notifications[id_user="'.$_SESSION["muffin_id"].'"]');
// Trie les résultats par date
$cpt->setOrder("date");
$cpt->setOrderSort("desc");
// Charge le tout depuis la base de données
$cpt->loadFromDatabase();
// Ajoute toutes les notifications précédemment chargées dans une variable "notifications" du template
$this->addData("notifications", $cpt);
// Met à jour toutes le snotifications de l'utilisateur en les marquant comme lues
Core::getBdd()->update (array("vu" => 1), 'c_notifications', array ("id_user" => $_SESSION['muffin_id']));
// Affiche le template correspondant (notification.get.twig)
$this->render();
}
else
echo "0";
}
}
// ...
Ensuite, la template Vues/notification.get.twig
va afficher le résultat :
<ul id="list-notification">
{% if notifications|length == 0 %}
<li><p class="light">Aucune notification</p></li>
{% else %}
{% for notif in notifications %}
{% if notif.vu %}
<li><span class="icon-uniF767"></span> {{ notif.message }}</li>
{% else %}
<li class="notification-new"><span class="icon-uniF766"></span> {{ notif.message }}</li>
{% endif %}
{% endfor %}
{% endif %}
</ul>
- Pour les designers / intégrateurs
Tout ce qu'il vous faut se trouve dans Templates/Muffin/src
. Les feuilles de styles sont écrites en LESS, et le tout fonctionne avec Grunt.
Pour installer le tout, il faut tout d'abord avoir (donc installer) node
et (ca va avec) npm
.
Ensuite, les dépendances s'installeront d'elles mêmes (ainsi que Grunt) en exécutant : npm install
.
Une fois toutes les dépendances installées, pour compiler les sources, grunt dev
.
Pour que grunt surveille les dossiers et recompile à chaque modification : grunt watch
.