création du portfolio
Auteur : adrien_contrib
Date de parrution : 2021-07-23 11:58:49
Dernière modification :
css html js php scss ACS dossier de conception SQL

Le développement de ce portfolio a été l’occasion de développer un certains nombre de fonctions. Retour sur le détaille technique.
Un cahier des charges ambitieux
Au commencement de ce projet, j'ai décidé d'implémenter un grand nombre de fonctions, notamment en PHP et SQL. En effet, il ne s'agirait pas seulement d'un portfolio, se contentant de présenter mes projets, mais aussi d'un système de post d'articles, avec la possibilité pour d'autres personnes de participer à l'écriture de certains articles. Le tout sans utilisé de CMS, en développant moi-même la totalité du code.
Problématique des jointures SQL
plusieurs problématiques nouvelles se sont présenter, notamment celle des tables intermédiaires:
En effet, chaque projet peut être lié à plusieurs tags, et chaque tag peut être relié à plusieurs projets. Dans cette optique, l'astuce est de créer une table projets, une table tags et une table intermédiaire qui lie les deux tables, ou chaque entrée comprend l'ID d'un projet et l'ID d'un tag. Puis on affiche un article (ou les articles sous forme de card), et à chaque article on appel toutes les entrées de la table intermédiaire dont l'ID de projet correspond au projet, et on va cherché les tags qui correspondent à chaque ID de tag trouvé dans les entrées précédemment sélectionner dans la table intermédiaire.
cette problématique s'est retrouvé à plusieurs endroits dans le code du portfolio. notamment pour la fonction de la barre de recherche, qui "fouille" de nombreuses tables et dont voici le code:
SELECT DISTINCT projects_id,
projects_title,
projects_thumbnail,
projects_context,
projects_begin,
projects_end,
projects_colabs,
projects_github,
projects_link, projects_design_file_link,
projects_visibility, projects_specification_tech,
projects_specification_function
FROM
projects
LEFT JOIN
jointags ON jointags_tablejoint = 'projects' AND jointags_table_id = projects_id
LEFT JOIN
tag ON jointags_tags_id = tags_id
LEFT JOIN
joinusers ON joinusesr_tablejoint = 'projects' AND joinusers_table_id = projects_id
LEFT JOIN
users ON joinusers_user_id = users_id
WHERE
projects_visibility = '1'
AND
((projects_title LIKE '%$search%')
OR (projects_context LIKE '%$search%')
OR (projects_specification_tech LIKE '%$search%')
OR (projects_specification_function LIKE '%$search%')
OR (users_name LIKE '%$search%')
OR (tags_name LIKE '%$search%'))
ORDER BY
projects_begin
DESC
hiérarchie d'administration
Ce portfolio est conçu avec un système de hiérarchie d'administration en fonction des utilisateurs. Ainsi, il doit permettre de modifier les paramètres de son propre profile (mail associé pour la récupération de mot de passe, mot de passe, pseudo, présentation,...) pour tout les utilisateurs. certains utilisateurs doivent pouvoir édité des articles (avec toutes les fonctions associé: nouveau, modifier, supprimer, affecter des tags,...) et enfin l'admin doit pouvoir édité les projets présentés. Pour cela, un champ de la table utilisateurs sert a déterminer le status de l'utilisateur, puis celui-ci est récupéré afin de déterminer quel partie du panneau d'administration est accessible. on évite ainsi les doublons (par exemple des espace d'administration différent avec certains éléments identiques) en suivant la logique suivante:
if ( /*is user*/ ) {
// panneau admin
// ressource pour tout les utilisateurs
if ( /*contributeur*/ && /*admin*/ ) {
// ressource pour les contributeurs et l'admin
}
if ( /*admin*/ ) {
// ressource réservé à l'admin
}
}
éditeur de texte enrichi
Une autre problématique nouvelle rencontré, le fait de pouvoir entrer dans une base de donnée du texte "enrichi", a savoir pouvoir en temps réel éditer une page avec un visuel du texte et des options (gras, italique, titre,...). pour cela, j'ai opté pour l'API tiny MCE (https://www.tiny.cloud/tinymce/). Je ne vais pas m'étendre sur l'implémentation de celle-ci, c'est gratuit et leur documentation est très correct. Un point bonus pour eux: ils ne se servent de votre adresse mail que pour vous envoyer quelques news sur le programme que vous utilisés, aucune publicité.
Ressources:
une ressource que je conseille fortement pour développer des commandes SQL complexes est le site sql.sh .
API de texte enrichi: tiny.cloud