Le carnet de bord du webmaster
Passez votre chemin c'est mes notes ici...
**** 30-04-2010
< script type="text/javascript">
<!--
window.addEvent('domready', function() { new YOOtooltip('yoo-tooltip-1', 'Tooltip Content', { mode: 'cursor', display: 'inline', width: 250, style: 'default', sticky: 1 }); });
-->
script>
< div id="accueil-news">
{yootooltip title=[< a href="#">< img src="images/durand/news/1.jpg" />< /a>]}Nos petits déjeuner fruités!{/yootooltip}
{yootooltip title=[< a href="#">< img src="images/durand/news/2.jpg" />< /a>]}Fruits et légumes de saison{/yootooltip}
{yootooltip title=[< a href="#">< img src="images/durand/news/3.jpg" />< /a>]}Les chouquettes de notre maître pâtissier{/yootooltip}
{yootooltip title=[< a href="#">< img src="images/durand/news/4.jpg" />< /a>]}Encart apéritif{/yootooltip}
< / div>
01h03 : Putain j'arrive pas à empêcher le lien, ni à trouver pourquoi le css bug :
http://jqueryui.com/demos/tabs/#...prevent_switching_to_the_tab_on_click_depending_on_form_validation
bigrrrrrrr
**** 25-04-2010
06h03 : start 14h46 : fini avec mon module héhé. choses … 02h44 : bon, hélas, je sis loin d'avoir fini le site avec Joomla!. J'arrive tout juste à sortir un début de maquette, mais rien de concret : J'avoue avoir passé du temps sur mon module, mais malgré tout il reste des conflits à résoudre. Cependant, très pratique et fiable pour une utilisation normale, il permet d'afficher les produits et/ou les catégories de virtuemart avec un jquerycarousel. http://zecommerce.fr/declochez/ J'ai vu ce qui se fait sur internet, et je n'ai pas trouvé son équivalent en gratuit. Pas assez cherché ? je ne sais pas… En tous cas je pourrais continuer à le développer et pourquoi pas gagner un peu d'argent avec ? Bref, ainsi s'achève cette phase de Joomla! Très en-dessous de ce que j'espérais, j'ai tout de même réussi à comprendre la logique générale du cms, encore heureux… Pour l'instant donc, je ne suis pas prêt, et loin de là à faire des sites en 1 heure. En réfléchissant un peu, je pense à moyen ou long terme à arriver à faire 2 site par jour avec ce genre de système. On verra bien … Maintenant, c'est une autre phase qui commence, celle de l'évolution de Tours annonces. Enfin un environnement que je maitrîse, je vais me faire plaisir. Au programme, plein de trucs qui sont déjà classés par priorité ici : http://www.toursannonces.fr/evolution Même si en fait je vais quand même bien relire pour redéfinir les priorités… Mais en gros, suite à un retour d'un commerçant, ma riorité sera le référencement. En effet, étant dans une logique stricte de développement, j'ai volontairement négligé le référencement qui pour moi est secondaire et inutile à la logique, la structure de l'application. Maintenant que l'application est construite, c'est différent : apparemment les commerçants ont besoin de ce référencement que je pouvais avoir sur la version 4, car ça les faisait monter s'ils avaient des sites internet… Et de toutes façons c'est en quelque sorte mon seul argument commercial, donc si je veux gagner un peu de thunes… A ben ça tombe bien, j'veux justement commencer à gagner un peu de thunes, mais chui pas pressé, je ne veux pas arnaquer quiconque, donc ça mettra le temps qu'il faudra, mais quand je sortirais mon service, il sera forcément plus intéressant que celui de mes concurrents, (c'est ma logique de businessman ;)) Pas difficile de faire mieux que les pages jaunes qui apparemment sont à 500Euros pour un "site" qui est en fait une page web. Bien référencés ? Certes, mais les temps changent, j'ai une certaine expérience du référencement maintenant, donc un de mes buts va être de remettre Tours annonces sur les premières pages de plein de mots clés. Mais ce n'est pas forcément le but principal, il ne faut pas négliger les services également. Bref, je vais pas m'étaler 3 ans. Demain je commence Tours annonces, comme si j'avais commencé à créer le site hier. Mon but, c'est d'avoir le service n°1 au niveau des annonces à Tours. Impossible face au boncoin ? Ben, j'me pose plus la question en fait, c'est mon but et puis c'est tout. Demain sera la première journée du mois d'évolution, je me créerais un ptit logo exprès juste pour le fun … ;)**** 29-04-2010
07h17 : start Entraînement sys-admin (lol) jusqu'à 10H http://www.ibm.com/developerworks/aix/library/au-satbuildscript.html 10h09 : dans mon tuto d'hier faudra rajouter que pour utiliser url rewrite, il faut ajouter la ligne LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so à la config d'apache 10h21 : bon ça y et ça fonctionne globalement, y a quelques images qui s'affichent pas, peut être un pb grave, ou pas, du au liens symboliques, mais je verrais ça demain. La je dois résoudre un problème sur la version en prod : un scooter je n'ai pas réussi à le valider : why ??? plein de choses … 01h07 : bon, j'ai trouvé une bonne base pour le site Joomla!, et je suis en train d'intégrer un module de présentation de produits pour le composant virtuemart. C'est intéressant, car je peux essayer de le faire bien comme il faut avec plein d'options. Mais du coup j'ai pas terminé. Demain dernier jour joomla! Le client est une librairie. Je me répète ?, je sais plus …**** 28-04-2010
06h55 : plus que 2 jours avant la fin de cette première session d'entraînement joomla! Cela n'empêche pas qu'il faut qe je réinstalle le nouveau serveur … Je n'ai toujours pas capté pourquoi il m'installer tout sur /dev/sda1 alors que je voudrais mes données perso dans /dev/sda2 http://formation.bearstech.com/trac/wiki/DebianOvh Rien capté! Après avoir contacté le support OVH, j'ai pu par chance obtenir un support technique. Normalement, mon offre ne me le permettait pas. Merci donc à ce gars de chez OVH, qui m'a sauvé la vie. Bref, en fait il faut que je mettes tout dans mon home et que en dernier je fasses un lien symbolique de /home vers /var/www Espérons juste que il n'y aura pas de problèmes de résolution ou conflits de liens symboliques. Dans tous les cas testons cela. Ayant marre de faire des recherches sur internet chaque fois que je réinstalle le serveur, et apparemment, je réinstalle le serveur plus souvent que je crois, je vais mettre si dessous les étapes exactes que j'utilise dans mon cas, puis je les mettrai sur internet pour en faire bénéficier les autres qui sont dans le cas où j'étais avant, c'est à dire complètement paumés et sans savoir par où commencer. Ce tutoriel donc, permet de mettre en place un serveur web configuré sur une machine dédiée sur laquelle vous avez un accès ssh en root et une debian fraîchement installée. Ce tutoriel ne prend en compte que ma config perso, (en fait c'est plus un mémo perso partagé qu'un tutoriel) et donc j'utilise un mac OSX 10.6.3 et une debian 5.0. Bon, c'est parti. La première chose à faire est de se connecter au serveur: ouvrez le terminal, puis tapez : ssh -l root 123.456.789.123 Ceci permet de se connecter au serveur dont l'adresse ip est 123.456.789.123 en root. Si c'est votre première connexion, il vous prévient par un message en anglais, bref, tapez yes pour continuer. Une fois connecté, configuration de l'environnement de la console pico .bashrc Dans le fichier, décommentez ou rajoutez les lignes suivantes: if [ "$TERM" != "dumb" ]; then eval "`dircolors -b`" alias ls='ls --color=auto' fi # ls Aliases alias ll='ls -alLi' alias la='ls -A' alias l='ls -CF' PS1="\u [\w] > " Puis sauvez. Pour sauver avec pico, on peut faire l'enchaînement ctrl+O (la lettre), puis Entrée, puis ctrl+X. Mise à jour instantannée des changements effectués source .bashrc Mise à jour de la distribution et sources.list (Répondre positivement à chaque fois qu'il pose une question) apt-get update apt-get upgrade apt-get dist-upgrade Personnellement ma debian est en lenny, donc et mes dépôts sont à jour. Si ce n'est pas votre cas, faîtes pico /etc/apt/sources.list Ajoutez ou décommentez les lignes suivantes: eb ftp://mir1.ovh.net/debian/ lenny main contrib non-free deb-src ftp://mir1.ovh.net/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free apt-get update apt-get install build-essential Installation et configuration d'Apache 2 apt-get install apache2 Pour vérifier que apache est installé, tapez votre ip dans un navigateur,le message It works! devrait apparaître. Configuration de Apache : pico /etc/apache2/httpd.conf Ajoutez le code suivant : DirectoryIndex index.html index.htm index.xhtml index.php (Sauvez et fermez.) Relancez apache pour vous assurer que tout va bien jusqu'ici. /etc/init.d/apache2 restart Dans mon cas, j'ai un disque dur de 750Go. En faisant df, je vois qu'il est monté sur /home, c'est donc là que je mettrais mes données. mkdir -p /home/www/toursannonces (l'option -p permet de créer les parents qui n'existent pas) Avant de rappatrier en masse les données du site, ce qui est très long, on va juste faire un miniminisite, qui contient juste un index en fait pour s'assurer que la logique d'organisation tiendra le coup avec les données réelles. donc je crée déjà le fichier index de mon site tant que j'y suis. pico /home/www/toursannonces/index.html Mettez du contenu html < h1>Bienvenue sur Tours annonces< /h1> Par contre, j'aime bien l'organisation d'apache par défaut : il met tout dans /var/www Donc je fais un lien symbolique de /home/www/toursannonces vers /var/www/toursannonces http://www.siteduzero.com/tutoriel-3-12771-manipuler-les-fichiers.html#ss_part_6 ln -s /home/www/toursannonces /var/www/toursannonces Cela va créer le dossier /var/www/toursannonces et le faire pointer vers /home/www/toursannonces A partir de maintenant, si je peux donc accéder à 2 urls : http://123.456.789.123 qui affiche It Works! Et http://123.456.789.123/toursannonces/ qui affiche Bienvenue sur Tours annonces Création des virtual hosts, je conseille de créer un fichier par virtual host, et de lui donner donner le nom du domaine. pico /etc/apache2/sites-enabled/toursannonces.fr Remplir avec ça : Ici, le nom de domaine toursannonces.fr n'est pas encore disponible, donc je vais faire mes tests avec testtoursannonces.fr < VirtualHost *:80> ServerAdmin lingtalfi@yahoo.fr ServerName www.testtoursannonces.fr ServerAlias *.testtoursannonces.fr DocumentRoot /var/www/toursannonces/ < Directory /var/www/toursannonces/> Options -Indexes FollowSymLinks MultiViews AllowOverride All < /Directory> < /VirtualHost> Pour vérifier que ca marche, dans mon cas, je prépare mon fichier EN LOCAL. sudo pico /etc/hosts et je m'assure de la présence de cette ligne : 123.456.789.123 www.testtoursannonces.fr Sur le dédié, je relance apache : /etc/init.d/apache2 restart Et enfin pour tester, j'ouvre le navigateur avec cette adresse : http://www.testtoursannonces.fr/ Ca m'affiche bien Bienvenue sur Tours annonces, donc c'est bon. Juste pour bien comprendre, en tapant ceci dans le navigateur : http://www.testtoursannonces.fr/ L'ordi a d'abord consulté /etc/hosts en local et a vu la correspondance 123.456.789.123 www.testtoursannonces.fr Il m'a donc envoyé à l'adresse http://123.456.789.123 Sur le serveur dédié apache reçoit ma requête et trouve mon fichier /etc/apache2/sites-enabled/toursannonces.fr Il sait qu'il doit rediriger toutes les requêtes du sous-domaine www.testtoursannonces.fr vers /var/www/toursannonces/ Et comme j'ai fait un lien symblique de /var/www/toursannonces/ vers /home/www/toursannonces, c'est l'index de /home/www/toursannonces qui et finalement affiché à l'écran. Voilà pour le gros d'apache. Passons maintenant à php, nous l'installons en tant que module apache apt-get install libapache2-mod-php5 Puis des plugins pratiques apt-get install php5-gd php5-mcrypt php-pear Relancer apache /etc/init.d/apache2 restart Pour tester, nous allons transformer notre index.html en index.php mv /home/www/toursannonces/index.html /home/www/toursannonces/index.php pico /home/www/toursannonces/index.php et tapez : < ?php phpinfo(); ?> Le contenu de phpinfo() devrait être visible à l'adresse www.testtoursannonces.fr Passons à mysql : apt-get install mysql-server Il va demander un nouveau mot de passe du superutilisateur de mysql Tapez simplement entrée pour l'instant, 4 fois de suite (à chaque étape.) Prise en charge de mysql par php apt-get install php5-mysql Relancer apache /etc/init.d/apache2 restart http://dev.mysql.com/doc/refman/5.0/fr/index.html Choisir un mot de passe pour mysql Tapez : mysql Vous êtes maintenant en mode mysql, tapez use mysql Pour voir l'état actuel des choses faites : select host, user, password from user; Dans mon cas, j'obtiens ceci : mysql> select host, user, password from user; +---------------------+------------------+-------------------------------------------+ | host | user | password | +---------------------+------------------+-------------------------------------------+ | localhost | root | *2EEC0B7826A9B1CFE0B9ED56BA7DE2B766005809 | | ks35826.kimsufi.com | root | *2EEC0B7826A9B1CFE0B9ED56BA7DE2B766005809 | | 127.0.0.1 | root | *2EEC0B7826A9B1CFE0B9ED56BA7DE2B766005809 | | localhost | debian-sys-maint | *06EE763DCA4E68F12A6855254BBF57C49D2290E9 | +---------------------+------------------+-------------------------------------------+ 4 rows in set (0.00 sec) Il y a donc 4 accès mysql. Etant donné que je suis seul admin sur la machine, c'est 3 de trop. http://dev.mysql.com/doc/refman/5.0/fr/default-privileges.html Ma technique perso : supprimer tous les comptes et installer un nouveau compte dans la foulée, et pas user=root c'est trop facile pour ceux qui veulent faire du brute force. delete from user; // effacer tous les comptes GRANT ALL PRIVILEGES ON *.* TO 'notroot'@'localhost' IDENTIFIED BY 'un_mot_de_passe' WITH GRANT OPTION; select host, user, password from user; // vérifiez que au moins un compte existe, sinon vous serez bloqué dehors après le flush privileges; flush privileges; puis quittez mysql (ctrl+D ou quit) Voilà (la conf de mysql est ici au cas ou :/etc/mysql/my.cnf) Maintenant pour se connecter à mysql : mysql -u notroot -p et le mot de passe est un_mot_de_passe Passons à phpmyadmin apt-get install phpmyadmin Choisir apache2 lors du choix demandé Dans mon cas, phpmyadmin s'est installé ici : /usr/share/phpmyadmin Pour y accéder depuis le web, nous allons créer un lien symbolique de /usr/share/phpmyadmin vers /var/www/phpmyadmin ln -s /usr/share/phpmyadmin /var/www/phpmyadmin Je peux maintenant y accéder depuis http://123.456.789.123/phpmyadmin Evidemment, en réalité, ca ne sera pas phpmyadmin mais pEohieF46XX_poeefk ou autre chose… Personnellement, en ouvrant phpmyadmin, je me prends une erreur : phpMyAdmin - Erreur PHP ne peut charger l'extension mysql, veuillez vérifier votre configuration de PHP - Documentation Un simple /etc/init.d/apache2 restart résoud le problème. Vérifier qu'on se connecter bien avec notroot et un_mot_de_passe Toutefois à ce stade, j'ai un gros doute concernant l'efficacité de cette technique au niveau de la sécurité. J'ai entendu parler d'un sniffer réseau. Si quelqu'un est capable de sniffer le réseau, alors il n'aura aucun mal à savoir où je me connecte, mettons même si pour me connecter à phpmyadmin j'utilise http://123.456.789.123/posdf6542_kEzjdp3 Cela sera visible sur le réseau et même si j'utilise mlzjeroi à la place de root, cela sera également visible sur le réseau, tout comme le mot de passe d'ailleurs. Gasp.. Avant d'aller plus loin, le mieux est peut être de prendre le temps d'utiliser les outils comme wireshark pour voir ce qu'il est possible de faire. Hélas, comme je n'ai pas le temps maintenant, je continue sur l'install du serveur… Pour ma part, il ne reste plus qu'à sécuriser ssh et mettre en place un firewall et le serveur est opé. Si vous voulez plus d'infos, utilisez ce tutoriel, c'est celui sur lequel je me suis basé : http://www.lafermeduweb.net/billet/tutorial-creer-un-serveur-web-complet-sous-debian-1-apache-160.html#confDebian Sécurisation de ssh Pour commencer, on va créer un utilisateur qui sera le seul à pouvoir se connecter en ssh, et ce ne sera pas root, pour éviter que qqn qui connaisse vos mots de passe ssh ne puisse pas tout casser sur le serveur. Dans mon cas, cet utilisateur est également le propriétaire des fichiers web en général. adduser monwebuser On commence par déterminer un port bien hard à trouver On peut trouver ici une liste des ports courants : http://portforward.com/cports.htm ou en faisant pico /etc/services De toutes façons je pense que quelqu'un qui analyse le réseau grille cela, c'est juste que ça évite de se prendre les grosses attaques automatisées qui ciblent le port 22 par défaut. Disons qu'on choisit 6060 pour l'exemple pico /etc/ssh/sshd_config Modifiez ou ajoutez les lignes suivantes : Port 6060 PermitRootLogin no PermitEmptyPasswords no Protocol 2 AllowUsers monwebuser Sauvez. Relancez ssh /etc/init.d/ssh restart Le firewall Une connerie et vous êtes bloqués dehors donc faîtes gaffe. Allez dans le home du root cd Puis créez le fichier firewall.sh pico firewall.sh En gros voici le fichier à copier coller et adapter pour les ports : #!/bin/bash echo Setting firewall rules... # # ###### Debut Initialisation ###### # Interdire toute connexion entrante iptables -t filter -P INPUT DROP iptables -t filter -P FORWARD DROP echo - Interdire toute connexion entrante : [OK] # Interdire toute connexion sortante iptables -t filter -P OUTPUT DROP echo - Interdire toute connexion sortante : [OK] # Vider les tables actuelles iptables -t filter -F iptables -t filter -X echo - Vidage : [OK] #Creation d'une chaine iptables -N LOG_REJECT_SMTP iptables -A LOG_REJECT_SMTP -j LOG --log-prefix ' SMTP REJECT PAQUET : ' iptables -A LOG_REJECT_SMTP -j DROP # Anti-Taiwanais iptables -t filter -A INPUT -i eth0 -s 61.64.128.0/17 -j LOG_REJECT_SMTP iptables -t filter -A INPUT -i eth0 -s 122.120.0.0/13 -j LOG_REJECT_SMTP iptables -t filter -A INPUT -i eth0 -s 168.95.0.0/16 -j LOG_REJECT_SMTP echo - Bloquer Taiwanais : [OK] # Ne pas casser les connexions etablies iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT echo - Ne pas casser les connexions ?tablies : [OK] # Autoriser la Supervision du serveur (SNMP) iptables -t filter -A INPUT -p tcp --dport 161 -s IP_SUPERVISION/32 -j ACCEPT iptables -t filter -A INPUT -p udp --dport 161 -s IP_SUPERVISION/32 -j ACCEPT echo - Autoriser Supervision : [OK] # Autoriser les requetes DNS, FTP, HTTP, NTP iptables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT echo - Autoriser les requetes DNS, FTP, HTTP : [OK] # Autoriser loopback iptables -t filter -A INPUT -i lo -j ACCEPT iptables -t filter -A OUTPUT -o lo -j ACCEPT echo - Autoriser loopback : [OK] # Autoriser ping iptables -t filter -A INPUT -p icmp -j ACCEPT iptables -t filter -A OUTPUT -p icmp -j ACCEPT echo - Autoriser ping : [OK] # HTTP iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT echo - Autoriser serveur Apache : [OK] modprobe ip_conntrack_ftp iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT echo - Autoriser serveur FTP : [OK] #DNS iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT echo - Autoriser serveur Bind : [OK] # Mail iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT echo - Autoriser serveur Mail : [OK] # Autoriser SSH iptables -t filter -A INPUT -p tcp --dport 6060 -m recent --rcheck --seconds 60 --hitcount 2 --name SSH -j LOG --log-prefix "SSH REJECT" iptables -t filter -A INPUT -p tcp --dport 6060 -m recent --update --seconds 60 --hitcount 2 --name SSH -j DROP iptables -t filter -A INPUT -p tcp --dport 6060 -m state --state NEW -m recent --set --name SSH -j ACCEPT Sauvez. Ajoutez les droits d'exécution sur votre script et lancez le : chmod +x firewall.sh ./firewall.sh Maintenant, il suffit de lancer ce script automatiquement à chaque démarrage : pico /etc/rc.local Ajoutez cela vers le début: /root/firewall.sh Et voilà, z. 13h40, bonben j'vais manger moi… 14h03 : Bon maintenant, comment je fais pour mes sauvegardes ? j'utilise rsync. Pour l'instant je fais ça : analyse des fichiers à rappatrier et à effacer pour être à jour par rapport au serveur en prod: rsync -avz --dry-run --itemize-changes --delete --out-format="%i|%n|" -e "ssh -p 7042" someone@123.456.789.123:/var/www/toursannonces/ "/mon/emplacement/en/local/" --exclude cache/ --exclude nbproject/ il me sort la liste des fichiers et si je vois rien de louche, j'applique le rsync. C'est un peu galère, mais au moins je contrôle ce que je fais. Application du rsync : rsync -avz --itemize-changes --delete --out-format="%i|%n|" -e "ssh -p 7042" someone@123.456.789.123:/var/www/toursannonces/ "/mon/emplacement/en/local/" --exclude cache/ --exclude nbproject/ Incroyablement pratique tout de même, en 1minute, j'ai une copie du site en local; Bon ben maintenant il me reste plus qu'à transverser tout ce contenu, et la je vais pleurer sa mère sur le nouveau serveur (again). Je vais chronométrer rsync pour voir combien de temps il met pour transférer 2,09 Giga par ssh. A mon avis mortellement long, mais bon. Pour l'instant, un peu parano, je préfère pas utiliser les passphrases, mais j'y viendrais peut être plus tard, si je suis débordé. Lancement à 14h17… En attendant je vais continuer mon investigation Joomla! oups permission denied! bitos… faux départ donc… lancement à 14h22 17h26, bientôt fini les images… 18h38 : fini ! Soit 4h20 pour 2,09Go 4h20 = 14420s Et 2,09 Go = 2 090 000 Ko Donc le débit moyen était en gros 144 Ko par seconde. Pause... 00h25 : Bon ben j'arrête joomla pour ce soir, j'ai pas TOUT compris, mais une bonne partie. Enfin du moins une partie suffisante pour faire du cms. Pas encore pour développer… Bon, il y a vraiment des côtés bien dans Joomla! Mais j'avoue que le fait de ne pas maitriser le code j'ai l'impression d'être coincé, c'est très désagréable. Peut être qu'avec plus d'expérience j'aimerais mieux. Demain, je fais donc le deuxième site. Disons que je serais dans la phase pincipale, les grands travaux. De toutes façons il ne me reste que 2 jours avant de me remettre à Tours annonces. Donc ben rien…**** 27-04-2010
07h32 : start lecture des logs amélioration de la verbosité, qui m'affiche maintenant systématiquement l'adresse ip de celui qui a rencontré un problème. Cela me permet de pister plus rapidement les problèmes récurrents, et donc de gagner un peu de temps lors du déboggage. 08h33 : correction d'un bug dans le formulaire d'ajout d'annonce immobilier location. beaucoup de choses … 00h02 : Bon j'ai profité de l'opportunité d'un nouveau projet Joomla! pour investir le code en profondeur… enfin du moins à mon niveau. Là j'ai vu jusqu'au JDocumentRenderer, en train de voir la méthode de fabrique des jdoc statements, very interesting, but tonight my brain starts to overhead. ouchaipas comment on dit bref, je sature, vais faire autre chose : une nouvelle passion : maya, la 3d ;)///... Le reste concerne plus le développeur …, même si je garde mon éthique de développeur du dimanche quand j'apprends maya. voix off.**** 26-04-2010
07h05 : start essai d'enlever une url du cache de Google... 08h18 : entraînement à rsync. 15h02 : je viens de m'aperçevoir que depuis le début, je suis sur la mauvaise partition ! Du coup j'ai saturé mon espace disque ! http://www.karlesnine.com/post/2010/01/12/Debian-Linux-:-Partitionnement-et-syst%C3%A8me-de-fichier Misère, c'est une journée de "perdue" par rapport à joomla! PAuse… 19h35 : travail sur le site joomla! quand même. 23h19 : kool : je viens enfin de capter comment utiliser jquery ET joomla ! http://docs.jquery.com/Using_jQuery_with_Other_Libraries J'avais déjà lu cet article avant sans jamais avoir pu comprendre. Aujourd'hui, latoucapté. Bon, mais cela se complique, pour d'autres raisons, je me permets d'écrire ce qui me passe par la tête ici : < div class="yoo-tooltip-toggler" id="yoo-tooltip-1" style="display: inline;">Tooltip Link
07h02 : start lecture des logs. Article très intéressant sur les backups avec rsync ou autre.. http://www.howtoforge.com/backing-up-with-rsync-and-managing-previous-versions-history http://www.linux.com/archive/articles/117236 14h04 : enfin j'ai réglé à peu près comme je voulais les réglages pour le carousel 3d, après plusieurs heures de test… Reste maintenant à le mettre en plugin… Lol, trop bien... http://www.blanksheetmusic.net/ petite pause musicale 17h43 : mon module est fini, mais pas bien codé, même si il est fonctionnel. Je ne gère pas les conflits mootools jquery, et je sous-entends que celui qui installe le module a fait le ptit hack de son Joomla! pour allow jquery. Bref, pas encore prêt pour être partagé tel quel, à peu de choses près. Sinon, très pratique. Correction d'un bug mineur décelé sur Tours annonces. choses de la vie … Ca y est, z with that. 00h25 : Bon sang, je me rends compte à quel point mon nouveau pc est silencieux. C'est agréable…. En train de débugger un template joomla absolument ahurissant.**** 24-04-2010
06h45 : start lecture des logs.. ras, à part une personne qui a rencontré un problème par rapport à la commune, mais je pense qu'elle a provoqué le problème. Elle a posté son annonce sans id de commune, alors qu'on est obligé de choisir une commune lorsque l'on met une annonce. Bizarre. 08h26 : Upload des fichiers sur le nouveau serveur. http://www.devirtuoso.com/2009/08/how-to-create-a-3d-tag-cloud-in-jquery/ http://www.devirtuoso.com/2009/09/3d-plane-for-jquery-3d-engine/ Ah ben finalement, on se rapproche vraiment là: http://www.devirtuoso.com/2009/09/creating-a-wobbling-3d-carousel/ Et voici the originals, très intéressant... http://www.kirupa.com/developer/actionscript/3dexplore.htm http://www.kirupa.com/developer/mx/perspective.htm et tout commence par le théorème de Thalès : H/h=(fl+z)/fl Je kiffe.. Par contre un pti rappel fait pas de mal : http://fr.wikipedia.org/wiki/Th%C3%A9or%C3%A8me_de_Thal%C3%A8s 14h58 : ayé j'ai mon beau carousel qui marche comme je veux. Reste à l'intégrer pour joomla! Pause … 17h27 : article intéressant sur l'utilisation du css par php dans joomla! http://www.howtojoomla.net/how-tos/development/how-to-use-dynamic-css-in-your-joomla-extension Encore un tip intéressant sur le loadage de module depuis un override. http://www.theartofjoomla.com/home/6-layouts/12-loading-joomla-modules-from-layout-overrides.html Un autre pour utiliser jquery dans joomla http://www.sanjeevshrestha.com.np/2009/05/using-jquery-with-joomla/ choses de la vie … 01h50 : après quelques prises de tête à propos de conflits mootools jquery, je refais le slideshow mootools (rokslideshow) en jquery, en utilisant le simple slide show de jon raasch. http://zecommerce.fr/parisbrest2/ Du coup, ça me met dedans pour les patisseries, le module 3d fonctionne bien, il me reste à changer les images. Bon, demain, je change les images, puis j'essaie de pérenniser les modules simpleslideshow et j3d carousel, histoire de n'avoir pas travaillé pour rien. Hélas, pas le temps de m'intéresser plus à la 3d pour l'instant.**** 23-04-2010
07h09 : start commençons par la lecture des logs de tan, puis l'installation, jusqu'à 10h du serveur sur ovh.. Bon pour les logs, il y a beaucoup de choses, mais pour ne pas me mélanger les pinceaux, à cause du crash serveur, je fais table rase, et je recommencerais mes investigations demain. 10h01 : tiens je vais pouvoir faire de la zik avec mon ordinateur… le retour de talfi ? Certainement… Bon, j'ai juste rappatrier mon environnement de travail tan en local. Passons maintenant au site Joomla en cours… patisserie ... pause 16h53 : mon premier vrai module est réalisé, je l'ai non modestement appelé mod_ling_jspacegallery. C'est juste une intégration pour joomla! de jquery space gallery. Reste plus qu'à découper des patisseries et on aura une maquette fonctionnelle pour ce site. Juste une remarque, le code html est sémantiquement déguelasse. Pour l'instant, je découvre Joomla! et j'ai pas le temps de tout changer alors je fais la technique de l'autruche, mais plus tard, il faudra trouver des moyens d'optimiser le code html. Sinon, hormis ce point très négatif, tout le reste est nickel. Et en fait, en regardant simplement mon template, je m'aperçois que le code est dégueulasse parce que j'ai dépouillé un template riche de ses fonctionnalités, et du coup il me reste toute la structure html sans contenu, my fault donc. ;) pour changer… 17h24 : je pourrais dire que c'est fini, mais j'ai envie de kustomiser mon deuxième module : une intégration pour joomla! de jquery image flow. C'est à dire le rendre paramétrable depuis l'interface d'admin de Joomla! Mais avant je vais déjà le mettre en ligne tel quel.. Allez au boulot... choses de la vie. La maquette est en ligne ici : http://zecommerce.fr/parisbrest2/ N'aimant pas du tout le slide des patisseries sur la page d'accueil, et ne trouvant pas d'autres solutions qui me satisfassent sur le net, j'essaie de créer ce module qui manque, qui existe par ailleurs en flash. je cherche recréer le module par moi même. Tombant sur cela, http://www.mathcurve.com/ je suis très surpris de constater que le chemin le plus rapide n'est pas forcément le plus direct. Puis je trouve cela finalement : http://www.willjessup.com/sandbox/jquery/rotator/rotator.html Ce qui m'encourage à continuer mes recherches avant de coder ou même de concevoir quoique ce soit. Sur cette dernière page, le mec utilise certainement des équations mathématiques. D'après ce qu'il dit, il a codé cela en 2 après midi. Respect, bref. http://www.willjessup.com/sandbox/jquery/solar_system/rotator.html Ceci est ce que je veux pour mes patisseries : fluide. Je me consacre encore la journée de demain pour tenter l'aventure mathématique, et c'est tout, il faut que j'avance, déjà que je suis très en retard… 00h34 : z**** 22-04-2010
06h34 : start 06h53 : tentative de suppression d’url du cache de Google suite à la plainte d’un utilisateur qui voulait que son n° de tél ne figure plus dans les recherches google… Attente du résultat en cours… 07h29 : recréation des routines tours annonces. 07:40 : test d'une synchronisation des serveurs avec mon poste : pour voir le temps mis avec transmit. 07h52 : un tutoriel difficile (pour moi) mais très intéressant pour une synchronisation optimisée, à faire plus tard … http://troy.jdmz.net/rsync/index.html 09h12 : le site du zero, mon site préféré : http://www.siteduzero.com/tutoriel-3-81065-analyser-le-reseau-et-filtrer-le-trafic-avec-un-firewall.html#ss_part_3 Maintenant, je ne suis plus parano : sur le nouveau serveur : celui que je prépare lentement mais sûrement, je SAIS ce que je fais au niveau de la sécurité. Accès ssh contrôlé, iptables contrôlé. Bref, je ne crains rien. Accès root denié. mwoHAHAHAHAHAHAHAHA; je commence à parler linux: bdslfuhzuh pzieufhpzifgpzgfeizueg=piodhspfh!!zfzhf ;) (pauv'garçon, il se sent plus pisser) Donc pour récapituler : iptables -A INPUT -p tcp --dport ssh -j ACCEPT && iptables -A INPUT -p tcp --dport www -j ACCEPT && iptables -A INPUT -p tcp --dport imap2 -j ACCEPT && iptables -A INPUT -p icmp -j ACCEPT Oups, me suis bloqué tout seul comme un c.n ! Ben oui en fait j'ai changé le port par défaut de ssh pour plus de sécurité et du coup il faut mettre iptables -A INPUT -p tcp --dport monPortPasCourant -j ACCEPT à la place de iptables -A INPUT -p tcp --dport ssh -j ACCEPT Wow, je viens de recevoir 2 messages de OVH comme quoi ils ont détecté des défauts sur mon serveurs (y m'ont reperé, ça y est, yzon vu que j'ai fait des boulettes ;)) Ca au moins ça me rassure, je sais que chui pas tout seul en cas de problème. 11h17 , après plusieurs tentatives, je réussis à configurer correctement mon firewall, en fait j'ai repris celui de la version actuelle de tan qui était bien configuré, et je l'ai légèrement adapté… Bon, essayons donc de créer le module qui gère mooflow pour le site de la pâtisserie (toujours) dans joomla. Apparemment trop de problèmes de compatibilité avec mootools 1.2, et puis je connais pas trop, (chui une br^le en javascript), voyons du côté de jquery : http://finnrudolph.de/ImageFlow/Features var attrib = node.getAttribute('src',2); var imageNameArray = attrib.split('/'); var sizeOfImageNameArray = imageNameArray.length - 1; var imageName = imageNameArray[sizeOfImageNameArray]; src = my.imagePath+imageName; choses de la vie... 01h22 : Bon, ben j'ai réussi à intégrer ce truc après quelques corrections. Je dois affiner quelques détails au niveau de l'affichage. Normalement, j'afficherai l'adresse ici demain. Bon, mais ça ne fait que 2 sites sur 4 prévu. Reste une semaine.**** 21-04-2010
Plusieurs événements ont coupé mon entraînement joomla, du moins ralentit le rythme; Même si j'ai progressé sur ce cms, à la fin du mois je n'aurais certainement pas le niveau nécessaire pour faire des sites en moins d'une heure. Doucement mais sûrement… Ces derniers jours, mon pc est tombé en panne, j'ai investit dans un nouvel ordinateur. Puis le serveur de Tours annonces est tombé en panne ces 2-3 derniers jours. Le support technique était très décevant : pas de raison donnée, les numéros de téléphones difficiles à trouver. Bref, je suis en train de déménager de serveur, vers un serveur logiquement plus puissant, et si c'est bien le cas la transition s'effectuera en douceur. Là je suis en plein dans le changement, il me faudrait encore une journée complète pour configurer le nouveau serveur, et peut être encore une moitié d'une pour rappatrier toutes les données… Bref, mon entraînement va être vraiment difficile, snif. Mon nouvel ordi me permet d'être super réactif sur les mails, ça c'est bien.**** 15-04-2010
07h15 : start Etude des logs, amélioration de la verbosité des messages d'erreur. Extrait de cette nuit : [15-Apr-2010 02:28:22] /annonces/liste-annonce?m=Rech.%20Personnes%20S%C3%A9rieuses%20Motiv%C3%A9es%20pour%20Activit%C3%A9%20%C3%A0%20Domicile&t=date&s=1&y=w&j=37&r=2&n=0&p=1 [15-Apr-2010 04:48:23] /annonces/liste-annonce?m=Rech.%20Personnes%20S%C3%A9rieuses%20Motiv%C3%A9es%20pour%20Activit%C3%A9%20%C3%A0%20Domicile&t=date&s=1&y=w&j=37&r=2&n=0&p=1 [15-Apr-2010 07:38:06] /annonces/liste-annonce?m=Rech.%20Personnes%20S%C3%A9rieuses%20Motiv%C3%A9es%20pour%20Activit%C3%A9%20%C3%A0%20Domicile&t=date&s=1&y=w&j=37&r=2&n=0&p=1 Une telle régularité à une heure aussi avancée de la nuit m'incite à penser que le propriétaire de cette annonce cherche à augmenter son compteur de visite afin de crédibiliser son annonce. Ce n'est pas très fair play de sa part, et si une personne est capable de créer de tels robots, est-elle capable de plus. En recherchant, dans les logs, c'est plein de robots scrawlers, le robot en question est 67.195.114.50 : Yahoo slurp! ça veut dire qu'il pense que le contenu de mon site est susceptible de changer toutes les 3 heures, wola, ils sont vénér chez Yahoo... Bref. Rien de bien grave en fait. Désinstallation de mon install préliminaire pour awstats, ça me fait trop flipper. 08h55 : libre de joomler. index.php?option=com_contact&view=contact&id=1&Itemid=201 none repeat scroll 0 0 #EBB755 mad4joomla : superbe technique de création de formulaire !! Simple et logique. Juste des petites erreurs d'étourderie à corriger avant utilisation : Remplacer echo'< td width="'.M4J_RIGHT_COL.';" align="left" valign="top" >'.$right; Par echo'< td width="'.M4J_RIGHT_COL.'" align="left" valign="top" >'.$right; Dans le fichier components/com_mad4joomla/mad4joomla.html Puis si comme moi, la largeur de la colonne droite n'est pas correctement assignée, rajouter : $query = "SELECT question_width as left_col, answer_width as right_col, use_help FROM #__m4j_forms WHERE fid = '".$id."'"; $database->setQuery( $query ); $form = $database->loadObjectList(); if($form) { define('M4J_LEFT_COL',$form[0]->left_col); define('M4J_RIGHT_COL',$form[0]->right_col); } dans : administrator/components/com_mad4joomla/includes/element.php A la ligne 69, après : $max_sort = null; $query = "SELECT MAX(sort_order) AS max_sort FROM #__m4j_formelements WHERE fid=".$id; $database->setQuery( $query ); $rows = $database->loadObjectList(); $max_sort = $rows[0]->max_sort; , non laissons tomber cela, fainéasse, voici un plan plus simple : Se connecter à la base et modifier le conenu de la table : jos_m4j_formelements Remplacer < input style='width: 100%;' id='m4j-2' name='m4j-2' type='text' size='18' maxlength='60' value= '{2}' /> Par < input style='width: 200px;' id='m4j-2' name='m4j-2' type='text' size='18' maxlength='60' value= '{2}' /> ou la valeur que vous voulez... 100% => 200px Soit dans le cadre de mon framework: Ling_Pdo::reset(); Ling_Pdo::inst('joomla7'); $stmt = "select eid, html from jos_m4j_formelements"; $r = Ling_Sql_Basic::freeFetchAll($stmt, array()); foreach($r as $k => $row) { $eid = (int)$row['eid']; $newhtml = str_replace('100%','200px',$row['html']); $stmt2 = "update jos_m4j_formelements set html=:newhtml WHERE eid=$eid"; $aData = array( 'newhtml' => array($newhtml, PDO::PARAM_STR), ); $r = Ling_Sql_Basic::freeStmt($stmt2, $aData); } exit; Bref, et pour enlever le copyright de mad4media : administrator/components/com_mad4joomla/mad4joomla.html.php function security_check() { if(!defined('IS_SECURE')) define('IS_SECURE',true); return; // enlève le copyright... for($i=0;$i < strlen(SECURITY_CODE);$i+=2) { $str.=chr(hexdec(substr(SECURITY_CODE,$i,2))); } echo stripslashes($str); } http://www.larstraiteur.com/images/boutons/pdf.gif index.php?option=com_content&view=article&id=75&Itemid=171 index.php?option=com_content&view=article&id=74&Itemid=1 http://www.larstraiteur.com/index.php?action=devis_particulier&id=19 index.php?option=com_mad4joomla&jid=1 choses de la vie... 00h23 : bon, presque, mais toujours pas, plusieurs problèmes annexes, rien à voir avec joomla... Ma maquette est plus ou moins finie en local, mais ce n'est qu'une maquette, et peut être que mon pote va pas du tout kiffer ?! Bref, tomorrow is another day. prout.**** 14-04-2010
07h27 : start 08h56 : j'utilise la version lite de zoo catalog, j'ai eu l'occasion de tester vite fait la 2.0 beta mais je n'ai pas retrouvé cette notion de type kustom que j'ai trouvé absolument génial sur le zoo catalogue lite. Donc bref, je suis repassé en lite. Je viens de trouver le truc qui me permet d'utiliser les propriétés kustom dans le module zoo_item. Après avoir fait un override du module : dans mon template : montemplate/html/mod_zooitem/list.php Pour récupérer par exemple le prix (propriété kustom) : $prixarticle = $item->getElement('prix')->render(ZOO_VIEW_ITEM); Pour coller parfaitement avec la logique déjà établie, je fais en 2 étapes : $prixarticle = $item->getElement('prix'); // dans l'init $prixarticle->render(); // plus loin dans la vue Ok, ça avance ; http://www.johnkyrk.com/evolution.swf http://www.joomlafrance.org/Les_News/Composants/Creation_d%27une_frise_Chronologique.html http://extensions.joomla.org/extensions/bridges/misc-bridges/7567 http://www.kalenga.fr/joomla/meilleures-extensions-joomla/2009/06/ simply insert {boncko}/mygallery/{/boncko} or {boncko msg="title different from default" music="mymp3.mp3"}/mygallery/{/boncko}, where you want your image gallery to appear inside your text. Documentation http://www.rockettheme.com/extensions-joomla/rokslideshow#documentation Bon, c'est pas mal, enfin, disons que j'arrive à mettre plein de modules qui en mettent plein la vue en un rien de temps. Après, faut adapter le design, je regrette : ma lenteur, c'est tout... Demain si tout se passe bien, j'aurais fini ce site. (on y croit). Non mais quelle lenteur, quelle lenteur...**** 13-04-2010
07h22 : start : J'ai l'impression de ne pas avancer.. http://shadowbox-js.com/forum.html#nabble-td3435588 http://www.joomlanook.com/index.php?option=com_kunena&Itemid=57&func=view&catid=9&id=3636 http://www.patiss.com/recette/index.html choses de la vie ... 00h05 : très impressionné par yoo thème : son menu en oo c'est d'la bal, I wish I could do the same... et zoo c'est d'la bal aussi, j'adore ce développeur, même si je comprends rien au code, mais j'essaie... 00h36 : zut alors, zarrive pas à zacker le zoo catalogue pour kil m'affiche les prix zet les champs kustom dans l'affichage zooitem. Bon ze ressaierai demain ... zododo..**** 12-04-2010
07h15 : start Tentative d'installation de Xdebug raté; 08h21 : tentative installation wamp : raté (php_mbstring.dll introuvable...) 08h47 : installation xamp : ok enable xdebug qui est fourni avec : ok : yes. Migration de mes projets vers xamp 09h58 : réussi mais comme un con j'ai effacé toutes mes bases de données = je dois me retaper l'install des produits, heureusement j'ai mon csvi pour les catégories... Lecture sur la sécurité avec xamp... Tentative de hackage de pc d'un pote, raté.. 10h51 : évidemment le csvi ne prend pas en compte la gestion des stocks ... INSERT INTO `jos_csvi_templates` (`template_id`, `template_name`, `template_type`, `skip_first_line`, `use_column_headers`, `collect_debug_info`, `overwrite_existing_data`, `skip_default_value`, `show_preview`, `include_column_headers`, `text_enclosure`, `field_delimiter`, `export_type`, `export_site`, `thumb_width`, `thumb_height`, `shopper_group_id`, `producturl_suffix`, `file_location_product_images`, `file_location_category_images`, `file_location_media`, `file_location_export_files`, `product_publish`, `max_execution_time`, `max_input_time`, `memory_limit`, `post_max_size`, `upload_max_filesize`, `export_filename`, `manufacturer`, `thumb_create`, `ignore_non_exist`, `thumb_extension`, `append_categories`, `export_date_format`, `add_currency_to_price`, `use_system_limits`) VALUES (NULL, 'CSVI Product Export Extended', 'productexport', 0, 0, 0, 0, 0, 0, 1, '~', '^', 'csv', '', 0, 0, 0, '', '', NULL, NULL, NULL, '', 6000, -1, 512, 100, 6000, NULL, NULL, 0, 0, 'none', 0, 'd/m/Y H:i:s', 0, 0); SET @lastid = LAST_INSERT_ID(); INSERT INTO `jos_csvi_template_fields` (`id`, `field_template_id`, `field_name`, `field_column_header`, `field_default_value`, `field_order`, `published`, `checked_out`) VALUES (NULL, @lastid, 'category_path', '', '', 3, 1, 0), (NULL, @lastid, 'product_availability', '', '', 10, 1, 0), (NULL, @lastid, 'product_available_date', '', '', 11, 1, 0), (NULL, @lastid, 'product_currency', '', 'EUR', 12, 1, 0), (NULL, @lastid, 'product_desc', '', '', 6, 1, 0), (NULL, @lastid, 'product_discount', '', '', 13, 1, 0), (NULL, @lastid, 'product_discount_date_end', '', '', 14, 1, 0), (NULL, @lastid, 'product_discount_date_start', '', '', 15, 1, 0), (NULL, @lastid, 'product_full_image', '', '', 8, 1, 0), (NULL, @lastid, 'product_name', '', '', 4, 1, 0), (NULL, @lastid, 'product_packaging', '', '', 16, 1, 0), (NULL, @lastid, 'product_parent_sku', '', '', 2, 1, 0), (NULL, @lastid, 'product_price', '', '', 7, 1, 0), (NULL, @lastid, 'product_publish', '', 'Y', 17, 1, 0), (NULL, @lastid, 'product_s_desc', '', '', 5, 1, 0), (NULL, @lastid, 'product_sku', '', '', 1, 1, 0), (NULL, @lastid, 'product_special', '', '', 18, 1, 0), (NULL, @lastid, 'product_tax', '', '', 19, 1, 0), (NULL, @lastid, 'product_thumb_image', '', '', 9, 1, 0), (NULL, @lastid, 'product_url', '', '', 20, 1, 0), (NULL, @lastid, 'product_in_stock', '', '', 21, 1, 0), (NULL, @lastid, 'attribute', '', '', 22, 1, 0); INSERT INTO `jos_csvi_templates` (`template_id`, `template_name`, `template_type`, `skip_first_line`, `use_column_headers`, `collect_debug_info`, `overwrite_existing_data`, `skip_default_value`, `show_preview`, `include_column_headers`, `text_enclosure`, `field_delimiter`, `export_type`, `export_site`, `thumb_width`, `thumb_height`, `shopper_group_id`, `producturl_suffix`, `file_location_product_images`, `file_location_category_images`, `file_location_media`, `file_location_export_files`, `product_publish`, `max_execution_time`, `max_input_time`, `memory_limit`, `post_max_size`, `upload_max_filesize`, `export_filename`, `manufacturer`, `thumb_create`, `ignore_non_exist`, `thumb_extension`, `append_categories`, `export_date_format`, `add_currency_to_price`, `use_system_limits`) VALUES (NULL, 'CSVI Product Import Extended', 'productimport', 1, 0, 0, 0, 0, 0, 1, '~', '^', 'csv', '', 0, 0, 0, '', '', NULL, NULL, NULL, '', 6000, -1, 512, 100, 6000, NULL, NULL, 0, 0, 'none', 0, 'd/m/Y H:i:s', 0, 0); SET @lastid = LAST_INSERT_ID(); INSERT INTO `jos_csvi_template_fields` (`id`, `field_template_id`, `field_name`, `field_column_header`, `field_default_value`, `field_order`, `published`, `checked_out`) VALUES (NULL, @lastid, 'category_path', '', '', 3, 1, 0), (NULL, @lastid, 'product_availability', '', '', 10, 1, 0), (NULL, @lastid, 'product_available_date', '', '', 11, 1, 0), (NULL, @lastid, 'product_currency', '', 'EUR', 12, 1, 0), (NULL, @lastid, 'product_desc', '', '', 6, 1, 0), (NULL, @lastid, 'product_discount', '', '', 13, 1, 0), (NULL, @lastid, 'product_discount_date_end', '', '', 14, 1, 0), (NULL, @lastid, 'product_discount_date_start', '', '', 15, 1, 0), (NULL, @lastid, 'product_full_image', '', '', 8, 1, 0), (NULL, @lastid, 'product_name', '', '', 4, 1, 0), (NULL, @lastid, 'product_packaging', '', '', 16, 1, 0), (NULL, @lastid, 'product_parent_sku', '', '', 2, 1, 0), (NULL, @lastid, 'product_price', '', '', 7, 1, 0), (NULL, @lastid, 'product_publish', '', 'Y', 17, 1, 0), (NULL, @lastid, 'product_s_desc', '', '', 5, 1, 0), (NULL, @lastid, 'product_sku', '', '', 1, 1, 0), (NULL, @lastid, 'product_special', '', '', 18, 1, 0), (NULL, @lastid, 'product_tax', '', '', 19, 1, 0), (NULL, @lastid, 'product_thumb_image', '', '', 9, 1, 0), (NULL, @lastid, 'product_url', '', '', 20, 1, 0), (NULL, @lastid, 'product_in_stock', '', '', 21, 1, 0), (NULL, @lastid, 'attribute', '', '', 22, 1, 0); pause : 12h11 : bon yen a marre, j'ai l'impression de patauger. changement de technique : je fais mon chrono d'une traite et APRES je corrige les bugs. Enfin, le principe c'est de faire phase par phase mais de ne pas interrompre une phase. 12h12 : top 12h46 : 20 13h19 : 40 13h41 : 60 top 1h29 pour faire 60 produits, en gros 30 minutes pour 20 produits Donc pour 1000 produits, disons 50x plus soit 30 x 50 = 1500 minutes = 25 heures de travail (sans pause). Si on se paie 10€ par heure, ça fait 250 € pour l'insertion de 1000 produits manuellement, bien sûr si toutes les informations sont déjà prêtes sinon c'est plus cher... Passons maintenant à la résolution des bugs les plus importants visuellement : 1. Pourquoi sur la page shop.browse vm m'affiche la fonction ajouter au panier sur certains produits mais pas tous ? 2. Mes prix sur la page shop.browse s'affichent précédés d'un $. Comment transformer ce $ en € ? 3. Sur la page shop.product_details du produit FLNA14ZBJBE, je voudrais que le prix se mette à jour dynamiquement, en fonction du choix de l'utilisateur. 4. Je voudrais que les prix des attributs ne soient pas soumis à la taxe. 5. Comment régler le nombre de produits afficher par ligne sur page=shop.browse Commençons par le template, puisqu'il est accessible, nous allons utiliser une copie de beez pour faire nos tests. Très modestement, j'ai nommé lingbiz. 15h48 : changement de projet, pause dans mon entraînement à la boutique en ligne, je vais essayer de faire le site pour une boulangerie, du moins aider à le faire, c'est un cas concret, donc plus intéressant... Notre modèle : Accueil http://www.swarovski.com/Web_FR/fr/index Site http://www.swarovski.com/Web_FR/fr/online_shop?origin=landing Site de patisserie... Au boulot... http://docs.joomla.org/Jdoc_statements http://docs.joomla.org/Applying_custom_module_chrome Rien à voir, très pratique pour vérifier les numéros de siret : http://www.verif.com/fiche.php?id=0 Ca m'évite de me déplacer pour valider un commerçant ;) http://highslide.com/ http://www.joomlanook.com/ {loadposition imageflow} 00h32 : dead, faudrait que je débugge le shadowbox de mootools, demain...**** 11-04-2010
06h27 : start : Bon, en fait le composant virtuemart est plus complexe à utiliser que ce que je pensais. Pour l'instant, de mon point de vue de néophyte, je ne le trouve pas intuitif, et à vrai dire, je ne comprends même pas son fonctionnement. Essayons de pénétérer un peu plus le système, étant donné que c'est la solution de paiement la plus répandue pour Joomla! http://virtuemart.net/dmdocuments/Developer_Manual.pdf http://virtuemart.net/documentation/User_Manual/index.html Un truc que je trouve pas logique sur ce site : http://www.aiapiercing.com/boutique/ Pour le produit LENAZG, il est indiqué qu'il y a 98 produits en stock mais on peut choisir sa taille entre 6 et 13mm et une couleur entre pierres noires et pierres blanches, alors quoi ? Comment se peut-il que l'information de la quantité en stock soit pertinente ? Que représente 98 ? Le plus logique serait que ce soit la somme de toutes les variantes de produits. Mais dans ce cas, comment peut-on savoir combien de produits de 7mm couleur pierres noires il reste ? C'est la une distorsion que je trouve non professionnelle, ça m'embête de reproduire cela. Bon mais pour l'instant c'est vrai que je n'y connais rien, je vais d'abord reproduire bêtement cela et dans une autre phase je m'attacherais à voir si virtuemart permet de gérer ces problèmes... Oups, en fait j'avais déjà configuré la solution sans le savoir. En effet en lisant le tutoriel j'ai créé des items (éléments) qui permettent une gestion de stock des variants, simplement je n'avais pas vu que cela s'était mis à jour dans le front end, et d'ailleurs je n'ai pas vraiment capté comment j'ai fait, essayons de reprduire cette manip... 09h59 : Ca y est, zai capté ;) En fait c'est expliqué dans le manuel telquel, même si ça parait fouillis au départ... Virtuemart gère bien les 2 modes comme prévu, ça me rassure... Bon, retrounons à notre exercice qui était de reproduire le site aiapercing. Dans leur cas, ils ne gèrent pas la gestion des stocks des variants (bourrins). Donc créons simplement les attributs à la volée lorsque nécessaire, et essayons donc de nous construire un petit catalogue, histoire d'avoir des données à manipuler pour l'affichage... 12h01 : pourquoi le csvi n'exporte/importe t'il pas les produits avec leurs attributs nativement. Raisons commerciales, ou faut-il juste mieux le configurer ? Apparemment ils disent sur les forums qu'il faut hacker improved csvi, et que ce n'est pas très dur... Si ils disent ça, c'est que ça ne doit pas être impossible. En passant ma tentative de hackage n'aura pas été inutile : /* Add javascript */ $document->addScript($mainframe->getSiteURL().'administrator/components/com_csvimproved/assets/js/jquery.js'); $document->addScriptDeclaration('jQuery.noConflict();'); $document->addScript($mainframe->getSiteURL().'administrator/components/com_csvimproved/assets/js/jquery.alphanumeric.js'); $document->addScript($mainframe->getSiteURL().'administrator/components/com_csvimproved/assets/js/csvi.js'); } 14h55 : Ca y est, en fait une simple requête était nécessaire, même si j'ai dû lire une grande partie du processus d'import pour m'en assurer. Si vous ne comprenez rien aux lignes ci-dessous, c'est normal, c'est fait exprès pour épater la galerie ;) sinon copiez collez ça dans phpmyadmin en tant que requête sql et exécutez, et hop : vous avez une version qui permet de importer/exporter un produit avec ses attributs de type stock non gérés. INSERT INTO `jos_csvi_templates` (`template_id`, `template_name`, `template_type`, `skip_first_line`, `use_column_headers`, `collect_debug_info`, `overwrite_existing_data`, `skip_default_value`, `show_preview`, `include_column_headers`, `text_enclosure`, `field_delimiter`, `export_type`, `export_site`, `thumb_width`, `thumb_height`, `shopper_group_id`, `producturl_suffix`, `file_location_product_images`, `file_location_category_images`, `file_location_media`, `file_location_export_files`, `product_publish`, `max_execution_time`, `max_input_time`, `memory_limit`, `post_max_size`, `upload_max_filesize`, `export_filename`, `manufacturer`, `thumb_create`, `ignore_non_exist`, `thumb_extension`, `append_categories`, `export_date_format`, `add_currency_to_price`, `use_system_limits`) VALUES (NULL, 'CSVI Product Export Extended', 'productexport', 0, 0, 0, 0, 0, 0, 1, '~', '^', 'csv', '', 0, 0, 0, '', '', NULL, NULL, NULL, '', 6000, -1, 512, 100, 6000, NULL, NULL, 0, 0, 'none', 0, 'd/m/Y H:i:s', 0, 0); SET @lastid = LAST_INSERT_ID(); INSERT INTO `jos_csvi_template_fields` (`id`, `field_template_id`, `field_name`, `field_column_header`, `field_default_value`, `field_order`, `published`, `checked_out`) VALUES (NULL, @lastid, 'category_path', '', '', 3, 1, 0), (NULL, @lastid, 'product_availability', '', '', 10, 1, 0), (NULL, @lastid, 'product_available_date', '', '', 11, 1, 0), (NULL, @lastid, 'product_currency', '', 'EUR', 12, 1, 0), (NULL, @lastid, 'product_desc', '', '', 6, 1, 0), (NULL, @lastid, 'product_discount', '', '', 13, 1, 0), (NULL, @lastid, 'product_discount_date_end', '', '', 14, 1, 0), (NULL, @lastid, 'product_discount_date_start', '', '', 15, 1, 0), (NULL, @lastid, 'product_full_image', '', '', 8, 1, 0), (NULL, @lastid, 'product_name', '', '', 4, 1, 0), (NULL, @lastid, 'product_packaging', '', '', 16, 1, 0), (NULL, @lastid, 'product_parent_sku', '', '', 2, 1, 0), (NULL, @lastid, 'product_price', '', '', 7, 1, 0), (NULL, @lastid, 'product_publish', '', 'Y', 17, 1, 0), (NULL, @lastid, 'product_s_desc', '', '', 5, 1, 0), (NULL, @lastid, 'product_sku', '', '', 1, 1, 0), (NULL, @lastid, 'product_special', '', '', 18, 1, 0), (NULL, @lastid, 'product_tax', '', '', 19, 1, 0), (NULL, @lastid, 'product_thumb_image', '', '', 9, 1, 0), (NULL, @lastid, 'product_url', '', '', 20, 1, 0), (NULL, @lastid, 'attribute', '', '', 21, 1, 0); INSERT INTO `jos_csvi_templates` (`template_id`, `template_name`, `template_type`, `skip_first_line`, `use_column_headers`, `collect_debug_info`, `overwrite_existing_data`, `skip_default_value`, `show_preview`, `include_column_headers`, `text_enclosure`, `field_delimiter`, `export_type`, `export_site`, `thumb_width`, `thumb_height`, `shopper_group_id`, `producturl_suffix`, `file_location_product_images`, `file_location_category_images`, `file_location_media`, `file_location_export_files`, `product_publish`, `max_execution_time`, `max_input_time`, `memory_limit`, `post_max_size`, `upload_max_filesize`, `export_filename`, `manufacturer`, `thumb_create`, `ignore_non_exist`, `thumb_extension`, `append_categories`, `export_date_format`, `add_currency_to_price`, `use_system_limits`) VALUES (NULL, 'CSVI Product Import Extended', 'productimport', 1, 0, 0, 0, 0, 0, 1, '~', '^', 'csv', '', 0, 0, 0, '', '', NULL, NULL, NULL, '', 6000, -1, 512, 100, 6000, NULL, NULL, 0, 0, 'none', 0, 'd/m/Y H:i:s', 0, 0); SET @lastid = LAST_INSERT_ID(); INSERT INTO `jos_csvi_template_fields` (`id`, `field_template_id`, `field_name`, `field_column_header`, `field_default_value`, `field_order`, `published`, `checked_out`) VALUES (NULL, @lastid, 'category_path', '', '', 3, 1, 0), (NULL, @lastid, 'product_availability', '', '', 10, 1, 0), (NULL, @lastid, 'product_available_date', '', '', 11, 1, 0), (NULL, @lastid, 'product_currency', '', 'EUR', 12, 1, 0), (NULL, @lastid, 'product_desc', '', '', 6, 1, 0), (NULL, @lastid, 'product_discount', '', '', 13, 1, 0), (NULL, @lastid, 'product_discount_date_end', '', '', 14, 1, 0), (NULL, @lastid, 'product_discount_date_start', '', '', 15, 1, 0), (NULL, @lastid, 'product_full_image', '', '', 8, 1, 0), (NULL, @lastid, 'product_name', '', '', 4, 1, 0), (NULL, @lastid, 'product_packaging', '', '', 16, 1, 0), (NULL, @lastid, 'product_parent_sku', '', '', 2, 1, 0), (NULL, @lastid, 'product_price', '', '', 7, 1, 0), (NULL, @lastid, 'product_publish', '', 'Y', 17, 1, 0), (NULL, @lastid, 'product_s_desc', '', '', 5, 1, 0), (NULL, @lastid, 'product_sku', '', '', 1, 1, 0), (NULL, @lastid, 'product_special', '', '', 18, 1, 0), (NULL, @lastid, 'product_tax', '', '', 19, 1, 0), (NULL, @lastid, 'product_thumb_image', '', '', 9, 1, 0), (NULL, @lastid, 'product_url', '', '', 20, 1, 0), (NULL, @lastid, 'attribute', '', '', 21, 1, 0); Tout ça pour un produit, ça fait pitié, bref. Evidemment ils ont protégés toutes leurs pages, du coup il me reste que la solution manuelle,... oh my. Bon, j'vais me faire 50 produits et basta, c'est qu'une démo... (fainéasse) Non, sans déconner ! dans ce cas là ça va même aussi vite de faire par virtuemart! Et mon import/export ne resservirait que ultérieurement ! 15h25 : juste pour me tester au niveau rapidité pour rentrer 60 produits (j'ai monté) à la main. top chrono 15h56 : j'arrête le chrono, je reprendrais plus tard, car j'ai un problème technique, et il y a 2 choses qui ne me plaisent pas : 1. J'ai un produit qui coûte 153.42€ HT et qui est soumis à la TVA de 19.6%. il est donc à 183.5€ TTC. Pourquoi quand je vais dans configuration générale > général > configuration des taxes : si je mets Calcul des taxes : Basée sur l'adresse de livraison : il m'affiche 153.42€ sur le front end et si je mets autre chose il m'affiche ce à quoi je m'attends, cad : 183.50€ ? Je ne vois pas le rapport entre le fait que le calcul des taxes soit basé sur l'adresse de livraison et le fait que la tva ne s'applique plus ! Et 2. Mon produit fait 157€ TTC Je lui ajoute des attributs dont le stock n'est pas géré : Par exemple couleur: noire et blanche. Disons que je veuilles que pour la couleur noire, le prix soit augmenté de 8€. Si je mets +8 dans le champ prix unitaire en face de la propriété couleur noire (formulaire ajout produit dans les attributs), il m'affiche 9.57€ sur la boutique! Cela m'obligerait à calculer tous les prix unitaires en fonction de ma taxe de 19.6%. Il y a t'il un moyen prévu pour que ce qui est marqué dans le prix unitaire ne soit pas soumis à la tva, tout en gardant le prix ttc sur la fiche produit ? http://forum.virtuemart.net/index.php?topic=69399.0 Non bonbref ok, je vais m'adapter. choses de la vie... pause ... Difficile, j'ai essayé de développer cette option qui ne semble pas exister, et je continuerai à essayer demain, mais si je ne peux pas, ben je m'adapterai... pause 00h49 : dodo**** 10-04-2010
07h29 : start Petite remise en forme des anciencs liens sur Tours annonces : /archives/profil-annonceur.php?pse=3533 /annonces/annonce=19892-lot-de-10-colliers-type-cerfflex ok 08h45 : oups mes stats, j'ai oublié de mettre 37, du coup pas de stats pour hier... 08h51 : z avec Tours annonces pour ce matin, I hope so... Joomla! Bon ben en fait il me semble que mon idée tombe à l'eau, faisons alors une boutique en ligne pour voir;.. Mais avant étudions les données d'exemples, il y a encore plein de trucs à apprendre... pause 10h51 : ok, très bien. Essayons donc une boutique en ligne de ... voitures ... http://dev.virtuemart.net/redmine/projects/virtuemart/wiki http://translate.googleusercontent.com/translate_c?hl=fr&langpair=en|fr&u=http://extensions.joomla.org/extensions/extension-specific/virtuemart-extensions&rurl=translate.google.fr&usg=ALkJrhikFLiu9FBh1IM43r7onY9DEdVfJw install en français : http://forum.joomla.fr/showthread.php?t=8311 http://translate.google.fr/translate?hl=fr&sl=en&tl=fr&u=http%3A%2F%2Fwww.vjtemplates.com%2F&anno=2 Yes : http://virtuemart.net/documentation/User_Manual/index.html Tant qu'à apprendre les différentes fonctionalités de Virtue mart, autant les lister, cela pourra resservir comme argument de vente :: -Possibilité de choisir le montant d'achat minimum pour la boutique -Possibilité de choisir le montant à partir duquel les frais de ports sont offerts Quickstart : http://virtuemart.net/documentation/User_Manual/First_Steps.html 15h03 : essayons de faire ça : http://www.bdnet.com/catalogue_detailbd_Fluide-Glacial-Fluide-Glacial-Numero-406--3780173903908 Une bd a une série, un genre, un éditeur, et d'autres trucs, mais déjà ... Bon, les données sont très bien recoupées, et recoupées de partout, pour l'instant je ne sais pas si j'y arriverais avec Joomla!, pour commencer essayons quelque chose de plus simple ... ça : http://www.aiapiercing.com/boutique/ Vu le nombre impressionant de catégories, et vu que je suis une fainéasse, essayons un moyen d'importer plus rapidement les cats que le moyen manuel. override template : http://virtuemart.net/documentation/User_Manual/Product_Administration.html http://www.csvimproved.com/ note : très kool, très propre ;) http://virtuemart.net/documentation/User_Manual/Administration_Products.html 16h16 ... en train d'écrire le fichier csvi pour les catégories.. 16h29 : les textes sont écrits, reste à rapptrier les photos et à écrire les références de ces photos dans le fichier csvi, puis copier et resizer les photos... ou pas. 17h04 : j'ai fini d'écrire le fichier mais pas encore testé... 17h11 : échec, vérification de ma syntaxe... effectivement grosse nouille.. 17h16 : nickel. Voyons si les images s'affichent... Certaines s'affichent mais la majorité non !! 17h20 : corrigé, à mon avis il y a du avoir un conflit avec l'importeur, je pensais qu'il ne toucherait pas aux images, mais peut être qu'il a fait qqchose ? En tous cas j'ai tout remis manuellement. Bon ben maintenant il nous faut des produits .. haha la bonne blague ... Je vais ptet pas rappatrier tout leur catalogue ... on va voir commençons par la première cat déjà... histoire de tester l'importeur.. Le premier article est déjà très intéressant : il y a : un titre une description un prix un stock une photo et on peut choisir la taille entre de 6mm à 16mm par une liste déroulante et on peut choisir une couleur entre "pierres noires" et "pierres blanches" par un bouton radio. Ce sont ces 2 derniers points qui m'intéressent : jusqu'où VirtueMart m'assiste pour la création de ces 2 nouveaux attributs ? Pour le savoir, commençons par créer l'article manuellement... Lisons encore la doc : http://virtuemart.net/documentation/User_Manual/Administration_Products.html AHA : http://virtuemart.net/documentation/User_Manual/Product_Attributes.html choses de la vie ... 22h53 reprise http://forum.joomla.fr/archive/index.php/t-12540.html 00h11 wow, je commence à décrocher, il me faut plus d'énergie, au dodo. http://virtuemart.net/documentation/User_Manual/Product_Types.html**** 09-04-2010
07h28 : start : 09h02 : en fait mon framework fait pitié comparé à celui de Joomla!. Quand je serais grand I wish I could rebuild a framework like Joomla! from scratch, c'est vraiment passionnant... (y a que mon système de liste que je trouve mieux...) 09h24 : ça y est, j'ai fini ma lecture... pause 09h49 : bien. Passons maintenant à la réalisation du composant contact_bride. En fait, il s'agit plutôt de user_bride, autant pour moi. http://docs.joomla.org/Adding_view_layout_configuration_parameters http://docs.joomla.org/Standard_parameter_types http://docs.joomla.org/Category:Development 13h26 : Rétablissement des anciens liens de Tours annonces, suite à un conseil de mon cousin. J'aurais du le faire avant: mieux vaut tard que jamais... téléphone 14h44 : intéressant : http://forum.joomla.fr/showthread.php?t=85414 $params = &$mainframe->getParams(); echo $params->get('title'); select * from annonce_en_attente where id_utilisateur=3823 15h34 : résolution d'un pb d'affichage sur Tours annonces. Hey : http://developer.yahoo.com/yui/grids/builder/ Hey : http://www.notwebdesign.com/joomla-component-creator/ Hey : http://forum.joomla.org/viewtopic.php?f=469&t=223890#p1038428 http://www.joomlack.fr.nf/en/tutorials-design-and-template-joomla/joomla-template-tutorials/tutoriel-langues.html 17h39 : enfin terminé sur ce composant, j'essaie d'aller un peu plus loin... choses de la vie. 00h22 : now my component is ready,... Let's make the description of the website before we move on the creation of a new one; // another template before I do this description $lang =& JFactory::getLanguage(); $lang->load('tpl_nameoftemplate', JPATH_SITE); 02h07 : Bon, je pourrais améliorer indéfiniment, mettons un stop, c'est fini pour ce site. http://zecommerce.fr/site3/ Dommage que l'admin soit pas en démo... Voici le texte de présentation que j'ai fait, je sais pas où le mettre donc pour l'instant je le mets en readme à la racine, il reservira plus tard... ------------ Le scénario : Le site Web que nous avons réalisé est celui d'une famille de viticulteurs du Languedoc, les Bertrand. Le chef de l’entreprise se nomme Pascal Bertrand. Il en incarne la troisième génération. Il propose à la vente différents cépages et millésimes. Jusqu’à ce jour, il livrait son vin à une coopérative viticole, avec un peu de vente directe pendant la saison estivale. Mais M. Bertrand voudrait aussi proposer son vin sur Internet. Notre site répond à ses attentes en proposant les caractéristiques suivantes : * présentation de l'entreprise Bertrand ; * informations générales sur la viticulture ; * possibilité de commande et de règlement en ligne ; * possibilité pour M. Bertrand de modifier le contenu de son site; * ajout de reportages photo et vidéo présentant les vendanges et les installations ; * création d'une zone réservée aux utilisateurs identifiés, pour leur proposer des promotions; * formulaire de contact pour les visiteurs ; Notre site propose un menu horizontal qui va permettre à l'internaute d'accéder rapidement à plusieurs pages essentielles. Le menu vertical de gauche offre une navigation plus classique et permet d'accéder aux différentes pages du site. La page contact contient un formulaire grâce auquel un internaute peut envoyer un message à M.Bertrand. Le plan du site est géré automatiquement par le système. Les internautes peuvent s'inscrire sur le site. Si M.Bertrand valide leur inscription depuis son interface d'administration, l'internaute devient alors un utilisateur. L'utilisateur peut se connecter à son compte et accéder à des pages supplémentaires. Un menu supplémentaire apparaît alors dans le menu vertical de gauche pour permettre à l'utilisateur d'accéder à ces nouvelles pages. Monsieur Bertrand se sert de ce système pour présenter ses promotions à des clients privilégiés. Si vous le souhaitez, vous pouvez vous connecter avec les identifiants suivants : identifiant : pierre mot de passe : pierre M.Bertrand a également souhaité que les utilisateurs puissent modifier leurs données (email, nom d'utilisateur) directement par le site. C'est ce que propose la page "mes coordonnées". Sur cette version de démonstration cependant, le mot de passe est bridé afin d'assurer que tous les internautes pourront se logguer avec les identifiants donnés. Lorsque l'utilisateur (internaute connecté à son compte) navigue sur les pages de vins, un bouton paypal apparaît dans le menu vertical de gauche, permettant à l'utilisateur d'acheter via Paypal les produits proposés par M.Bertrand. Pour cet exemple, il s'agit : d'une bouteille de vin rouge à 12€ d'une bouteille de vin rosé à 10€ d'une bouteille de vin blanc à 10€ PayPal est le système de paiement Web le plus répandu au monde, il appartient à la société eBay. Lorsque l'utilisateur clique sur ce bouton, l'article est déposé dans le panier PayPal. Précisons que les frais d'expédition et les taxes sont gérés. La page promotions propose aux utilisateur d'acheter les produits de M.Bertrand à des prix réduits, toujours par l'intermédiaire de Paypal. Pour offrir aux visiteurs de son site un aperçu de la région dans laquelle il est implanté, M. Bertrand décide de donner accès à des images. La galerie présentée sur le site dans la partie reportage est complétement administrable, M.Bertrand ajouter, supprimer, renommer ses photos, et les organiser en albums qui apparaîtront alors sur le site. Enfin nous avons ajouté un élément tout en bas du menu vertical de gauche, permettant de changer rapidement de design, 2 designs ont été créés pour ce site. -------------- 08h08 : bon vais m'coucher, et là demain, VRAIMENT, je commence le deuxième site...**** 08-04-2010
08h00 : start Continuons à appréhender l'API de Joomla à travers le tutoriel donné... 10h30 : http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_1 12h49 : un utilisateur me signale un bug sur les annonces, les photos, effectivement, je n'avais pas vu, mais les photos semblent se cumuler au fur et à mesure que j'édite des annonces. Ce n'est pas exactement cela que l'utilisateur m'a décrit, mais commençons par corriger cela. 13h59 : Ayé. D'autres bugs : en fait pas des bugs... 15h56 : Une amélioration à faire urgemment au niveau de l'admin! Décidément, difficile de développer en paix, mais j'y crois j'y crois... Téléphone ... SAV Tours annonces .. 17h46 : ... mais laissez moi tranquille, pitié ;) choses de la vie... 23h14 : ah enfin un moment libre... Bon ben joomla... téléphone... A propos du site, J'ai pu vérifier que c'était mon serveur de test qui est pourri, sur un serveur digne de ce nom ça donne cela : http://zecommerce.fr/site3/ 01h24 : bon, encore un peu de temps libre... Je sens que avec Joomla! ça va le faire... ;) 01h40 : bon en fait la fatigue commence vraiment à se faire sentir, je garde toutes mes forces pour demain, le jour où j'aurais fini mon premier composant et où je pourrais commencer à coder le deuxième site... moHAHAHAHAHHAHAHA**** 07-04-2010
08h16 : start Aujourd'hui, comme je compte installer awstats ce soir, je pense me consacrer entièrement à Joomla! Mon framework est nettement plus rapide, mais j'ai bon espoir que sur un bon serveur, un Joomla! tournera correctement. De plus le but de ce mois est d'apprendre à utiliser ce CMS, donc pas de remords. Avant de créer le fiche explicative sur mon premier site avec Joomla! il faut que je puisse vérouiller le mot de passe pour la version de démo. En effet, si jamais vous lisez ce blog et que vous aviez vu mon site, vous avez certainement remarqué qu'il y a avait un menu de connexion utilisteur. Si vous vous étiez connecté, vous auriez accéder à 2 nouvelles pages. Il est dans mon intérêt que l'internaute puisse accéder à ces pages. Mais l'une de ces pages est un formulaire de modification des données de l'utilisateur. Je veux simplement empêcher qu'un internaute mal intentionné change le mot de passe, ce qui aurait pour résultat que les internautes qui visitent le site après lui n'auraient plus connaissance de ce mot de passe. Hacker le composant contact serait certainement la solution la plus rapide, mais dans un but pédagogique, et parce que je trouve cela plus propre, je vais créer un composant contact bridé, ce sera mon premier composant Joomla! En réalité, je n'ai qu'à faire un copier coller adapter, c'est de la triche mais bon, restons concret et ne développons que lorsque nous en avons besoin. http://api.joomla.org/Joomla-Framework/Environment/JRequest.html $viewvar = JRequest::getVar('view',''); http://www.phpeveryday.com/pack/Joomla-Component-Step-By-Step-Tutorial http://www.motov.net/joomla-simple-tutorial-how-to-make-your-own-component.html http://www.torkiljohnsen.com/2006/04/30/joomla-15-database-schema/ choses de la vie 12h50 : je viens de finir de me taper en survolant le tuto : http://www.phpeveryday.com/pack/Joomla-Component-Step-By-Step-Tutorial Très instructif! Bon, mais j'ai fait que du copier coller et vérifier que ça fonctionnait, et c'était le cas. Je pense qu'il est temps maintenant de mettre les mains dans le cambouis et de refaire ce tutoriel mais cette fois-ci sans copier coller. La technique du copier recopier ou copier écrire. Il me semble que ce sera vraiment le moyen pour moi de franchir cette barrière et de connaître les objets Joomla! en les manipulant. Une ptite pause pour m'donner du courage et je remets ça... 13h19 : bon, après avoir survolé les données, il est temps de les assimiler. Le but est de tout refaire de mémoire, et quand la mémoire flanche, regarder la source. Règle à respecter : ne jamais utiliser le copier coller sauf sur un code que j'ai écrit avant. action choses de la vie... Bon, en fait je dois encore personnaliser un peu le myspace... Bon, j'y arrive pô. I hate kustomising myspace. The guy who made myspace, does he know anything about css ? Oups, mes stats ont pas fonctionné, j'ai oublié un s à annonce et commerce. Corrigé. 00h04 : bon, j'ai vu qu'un commerçant a essayé d'ajouter des spécialités, mais ses spécialités ne me conviennent pas car elles ne sont pas vraiment réutilisables par d'autres, il me faut un moyen de lui suggérer d'autres spécialités. Il n'y a pas encore ça dans mon admin, corrigeons ce problème... 00h41 : ok. 01h07 : mise en ligne de l'ajout et ajout des spécialités pour une bijouterie : bijoux damas, bijoux fantaisie , bijoux or, bijoux argent, bijoux agatha. Toujours pas assez d'énergie pour installer awstats... Et plus d'énergie pour Joomla! non plus. Résumé : aujourd'hui, j'ai commencé l'apprentissage proprement dit de Joomla! : manipuler doucement les fonctions de haute abstraction permettant de manipuler l'API du framework vite fait... Je n'ai pas encore fini mon bon tuto, mais demain ça sera bon, je pourrais alors créer mon composant contact_bride, et je pourrais finir mon site, peut être en commencer un deuxième dans la foulée, ça tombe bien j'ai une idée...**** 06-04-2010
07h54 : start : Je suis en train de réfléchir : qui utilise les stats sur tours annonces ? Les utilisateurs, moi, c'est tout ? ... je pense que oui, je n'ai pas encore fait de système qui place les catégories par rapport aux stats ou quelconque autre système qui utilise les stats (enfin de mémoire). Ok, La je cherche à améliorer les performances radicalement de l'afficahge des stats car je vais pas passer ma vie à faire la rotation manuellement, et comme c'est un gros calcul, je veux éviter de le demander au serveur. Ai-je vraiment besoin de connaître les url ? Pour moi c'est relativement intéressant, mais pour l'affichage, pas du tout. C'est ça la solution. Je vais créer 2 stats parallèles : une pour l'affichage, complètement optimisé, genre affichage direct des données, sans calcul. Et en parallèle je continuerai à alimenter la table complète. Comme ça un jour ou chui motivé, je me copie la table des stats et je la rappatrie, puis je peux la vider en live, cela n'aura que peu d'incidence sur le site. Codons cela. 08h57 Ok. Et maintenant, passons à la stratégie de déploiement : 1. rappatrier la table statistique en local 2. Faire les calculs de mise à jour de statistique_totaux en local (...) 3. Vider puis recréer statistique_totaux en ligne. 4. Déployer index.php et contenu/statistiques.php en ligne 09h03 : pendant que mon script fait les calculs de mise à jour 09h08 : ayé. L'inconvénient de cette méthode est qu'elle alourdit légèrement toutes les pages, puisque je fais une requête pour tester l'existence de l'ip aujourd'hui, c'est chiant ce truc, j'ai presque envie de le virer... En fait, je crois que le mieux serait d'installer awstats, j'ai pas envie de pénaliser tout le monde pour des stats, et tout le monde s'en fout que les stats soient visibles ou pas. Si je fait genre un rapport tous les mois, ça va pas me tuer, et tout le site sera légèrement plus rapide. Ca vaut le coup. 09h16 : Etude des logs. RAS. Voyons pour awstats. http://wiki.bargeo.fr/doku.php?id=configuration:awstats En fait j'ose pas lancer le restart d'apache, ya trop de trucs que j'ai pas capté, je me dis que je vais tout faire planter et j'ai des doutes sur la sécurité, je vais attendre la nuit pour agir, comme ça au moins les utilisateurs de tours annonces pourront utiliser le service en journée. 10h02 : maintenant mettons en ligne mon "autre" site (partie2:la config.) en attendant que les dns se mettent à jour... http://www.theartofjoomla.com/ http://www.theartofjoomla.com/joomla-caching-explained.html Putain je capte pas pourquoi certaines photos s'affichent presque normalement dans le reportage et d'autres ne s'affichent pas!! 12h31 : AAAArgh.. J'ai bien envie de mettre ça sur le dos de l'hébergeur, mais certaines s'affichent normalement. Ca doit être un bug de morfeo ? 15h08 : Ca y est j'ai mis "l'autre site" (je vais finir par vous dire ce que c'est...) en ligne. Super lent, mais bien plus rapide que Joomla! Normal, c'est mon framework minimaliste heyhey (le même que Tours annonces mais plus minimaliste encore, car le projet est plus petit, enfin au niveau de la consommation ressource je parle). Et là, je vois bien qu'ils ont un problème avec leurs serveurs concernant les images de fond. C'est effroyable, vivement qu'on se barre avec tony de ce guépier. Bouh les vilains. Bref, maintenant commençons une charte graphique pour le myspace d'une amie; C'est moi qui avait fait celui là il y a un certain temps : http://www.myspace.com/jaipurmaharajabrassband2 j'étais motivé à l'époque. Nous allons refaire plus ou moins le même... En cherchant une police baroque.. http://fr.fonts2u.com/download/baroque-antique-script.police choses de la vie... 22h40 : alors que un utilisateur m'a déclaré qu'il n'arrivait pas à modifier son commerce, après avoir corrigé le bug en local, j'ai essayé de trouver la raison de la lenteur de ce formulaire. Et contre toute attente, il me semble avoir trouvé le point faible : la liste déroulante des villes !! Aussi invraisemblable que cela paraisse cette simple requête de sélection des villes semble consommer au moins la moitié du temps de chargement de la page. Je vais mettre cette liste dans un cache pour voir si cette solution tient ses promesses. Oups! j'ai oublié ça va pas être possible sinon la liste sera figée. Néanmoins, en cherchant encore (je suis très tétu), je voulais savoir si en updatant avec du jquery c'était possible Après avoir mis en pratique cela : http://forum.jquery.com/topic/choose-a-select-option-based-on-number-in-order j'ai la preuve que cela fonctionne, le seul danger est que ceux qui n'ont pas javascript seront pénalisés et même bloqués (à moins d'une astuce de ma part), mais comme au moins 90% des personnes ont javascript activé, et d'ailleurs à part les hacker, je ne vois pas qui n'a pas javascript (peut être un manque de culture générale de ma part), donc j'ai bien envie d'implémenter cette solution et de carrément rediriger les autres utilisateurs vers une autre page qui leur demande d'activer javascript ! C'est accessible ? Ben pas top, mais je laisse quand même une solution ! Tout le monde est capable d'activer javascript je me trompe ? Il faut voir le côté positif des choses : + de 90% des personnes vont avoir un formulaire 2 fois plus rapide ! Ca y est c'est décidé, je code ça, on est pas dans une période tours annonces, mais pour moi la lenteur c'est comme un bug, donc je prends sur moi... Oups ! En regardant le formulaire, il apparaît que celui-ci affiche toutes les villes de France !! Quel con !! Et je pèse mes mots. Ca se trouve c'est juste pour cela que c'est long, vérifions... Hey, vous savez quoi c'était ça ! Kool pas besoin d'exclure 10% de la populace pour gagner en perf.... ;) Je regrette que cela soit resté si longtemps en ligne (et je peste que personne ne me l'ait signalé, peut être que personne ne l'a remarqué ?) Et du côté formulaire annonce ? Non, ça c'était bon. ouf. L'utilisateur en question m'avait parlé du bug sous ie8, l'occasion pour moi de upgrader... Pas simple les mises à sous ie... Ok réglé. Note : les stats fonctionnent pas dans les autres villes, et je sais pourquoi : encore une erreur de ma part ... mais vu que je vais ptet installer awstats... Consultation de la requête la plus longue : notre vainqueur est 41.216.46.78 Qui a affiché une page en 116,1s !! Et oui apparemment c'est possible, je vous rassure, les autres sont nettement en-dessous. à 2010-04-05 13:41:54 sur l'url : /web/liste?t=date&s=1&r=0&y=t&m=&p=3 Pourtant cette page s'affiche rapidement dans mon cas, peut être un problème serveur à ce moment ??? Bon avant de me mettre la misère sur awstats (nan j'veux pas, sans déconner, escape, escape!!!), il faut continuer le myspace, le moment où je me transforme en "graphiste", calme et tranquille moment dans ma vie... note qui a rien à voir : supprimer l'item web de lucas qui apparaît 2 fois... 02h24 : Bon, ça y est pour le myspace je m'arrête là . Pour moi ça me va, y a des trucs que j'arrive pas à faire genre virer l'espace du bas, mais globalement je trouve ça pas mal pour un myspace : http://www.myspace.com/suonareecantare Bon, ce soir j'installe pas awstats : trop risqué. (héhé)(ouai, ouai, nous on veut pas l'installer...)**** 05-04-2010
07h50 : start bon sang déjà le 05, mine de rien !! 08h11 : l'autre site est en ligne, me manque les codes d'accès pour rediriger le nom de domaine... en attente... En attendant d'avoir les codes myspace :: Juste la table des stats montent vraiment vite. Je devrais peut être installer awstats ou urchin et afficher des captures ou limiter l'accès ? Je verrais ce soir... Retournons en attendant à la kustomisation de notre petit site joomla! Ah oui déjà voir comment changer le dossier d'accès : administrator... 08h23 : http://www.aide-joomla.com/tutoriels/securite/354-renommer-le-dossier-administrator.html 09h15 : finalement j'utilise jsecure, car apparemment il y a bcp d'avis différents et tentatives ratées sur le renommage du dossier. Jsecure est un truc simple qui correspond à mes besoins : changer l'accès direct par administrator. 09h32 : tant qu'on est dans la découverte je vais essayer de brider l'admin pour simplifier la vie d'un futur client... http://docs.joomla.org/Administrators http://docs.joomla.org/Vulnerable_Extensions_List http://brian.teeman.net/joomla-gps/joomla-15-acl-explained.html AAAhh :: http://extensions.joomla.org/extensions/access-a-security/backend-a-full-access-control Parenthèse : sauvegarde avant de faire des boulettes : j'ai trouvé akeeba backup, tout le monde dit que c'est bien. J'ai testé, effectivement ça fonctionne, mais 4 minutes pour faire le restore! Hélas, c'est beaucoup trop long pour moi, je ferais donc mes sauvegardes en local par un copier coller windows + un dump mysql. En fait c'est akeeba backup c'est bien en mutualisé. Evidemment c'est en local et tous les fichiers sont copiés et pas archivés mais : le dump mysql sauve la bdd quasi instantanément et pour restorer pareil. 11h34 : Bref, toujours pas de gestion de acl qui me convient pour l'instant 12h08 : téléchargement de joomla 1.6 alpha qui annonce gestion des acl. J'ai pas bien capté... Moi tout ce que je veux c'est brider le menu. http://www.joomlafrance.org/telecharger/select/Templates_Administrateur_Joomla_1.5.x/par_titre/1.html hey : http://docs.joomla.org/ACL_Tutorial_for_Joomla_1.6 Bon ça a l'air pas mal, j'ai la flemme de lire, je testerai mieux si ça sort en juillet comme ils disent, en fait en attendant la gestion par défaut est pas mal, Avant de tout casser, je vais déjà essayer de me la jouer front user qui gère bien ce qui est proposé. 12h50 : Repartons sur le design... 13h40 : http://translate.google.fr/translate?hl=fr&langpair=en|fr&u=http://www.design-joomla.eu/ C'est un peu comme ce que je veux/vais faire, sauf que lui il ne vend que les templates. Un autre point de vue sur l'override... http://docs.joomla.org/How_to_override_the_output_from_the_Joomla!_core 17h53, bon il me reste la page promo à faire. Je garde virtu mart pour une vraie boutique en ligne, là je vais rester dans le style oldschool, avec des vieux boutons paypal... mais une ptitepause s'impose avant. 20h20 : bon la page promo est faite, j'ai pris mon temps... comme d'hab... J'aimerais bien être plus efficace sur Photoshop, mais bon au moins j'aime bien l'utiliser c'est un bon début. Ah oui j'oubliais, la partie reportage. Bien que je trouve que le composant exposé soit trop moderne par rapport au design du site, je vais quand même le paramétrer car il pourra me reservir. si j'ai le temps j'en prendrai une autre. Le seul point regrettable pour la réalisation de ce site est que je n'ai pas fait la bannière, ni le menu, ni les puces du menu, donc on ne peut pas vraiment dire que le mérite me revient, en tous cas pas entièrement... Mais je me rattraperai sur les autres sites où là je ferai tout, pas de gruge, car je veux être bon là dedans. 20h58 : je viens d'essayer joomgallery, puissant, extrêmement puissant, mais je n'aime pas le rechargement (minime) de page entre le visionnage de 2 photos. Mais vraiment puissant, sisi j'vous jure... Vu que cela m'a pris 5 minutes de trouver le composant et 2 minutes de l'installer, ça vaut le coup d'en cherche un autre. Juste comme ça pour me dire que chui sur la bonne voie, pour développer un truc comme joomGallery, disons en autonome, sans parler de Joomla, je pense qu'il m'aurait fallu 2 semaines sans compter la partie batch upload que je ne sais pas vraiment faire. Bref, c'est trop bien. 21h04 : j'ai trouvé et installé rockslideshow, mais il s'affiche dans le menu... 21h12 :ahah : http://forum.joomla.fr/showthread.php?t=98827 21h16 : et pour créer des positions de modèle : http://www.antevox.fr/tlch/creer-modele-pour-joomla-1.5.pdf 21h26 : très intéressant concernant l'organisation interne de Joomla! http://docs.joomla.org/Retrieving_parameter_data_in_a_template_file 21h33 : Et voilà ce qui marche dans mon cas :http://forum.joomla.fr/showthread.php?t=117098 en fait chui pas fan de rockslideshow 21h41 : installation et test de image flow : pas fan. 22h34 : installation de morfeoshow : gros fan !! 00h02 : Bon j'ai fini de faire joujou, passons à la mise en ligne. Ptite sauvegarde avant. Tiens intéressant, pour compenser mon manque de référencement actuellement :http://www.communique-presse.biz/wp-admin/ Après diverses choses, la mise en ligne semble correcte : mais la lenteur est à se taper la tête contre les murs, mais cela n'est pas entièrement dû à Joomla! Le serveur est lent voir pourri. En aucun cas je ne pourrais présenter ce genre de site avec cette lenteur à un vrai client, mais disons que ça me permet de m'assurer que Joomla! marche ailleurs que chez moi. Heureusement que j'ai pas suivi le tuto de Joomla! pour les nuls qui demandait de tout réinstaller !! Ok, mais vraiment si rien d'autre ne marche... Il suffisait d'éditer le fichier configuration.php (ils sont fous dans Joomla! pour les nuls ou quoi...) Bref, Ah ben ça y est le serveur se remet à débiter normalement;.. J'y comprends rien, il a ses heures, ou c'est moi qui débloque??? Bref, Par contre manque une image.... Et c'est super chiant la bannière qui arrête pas de sauter... Ah non en fait les images manquent pas... Juste mal configurées, pas habitué au système... 02h02 : http://217.16.2.57/joomla3/ Fier, mais pas fier. Bon vais me coucher , chui content qu'en local ça marche mais tant que ça sera pas plus rapide, je serai pas content, et même je n'utiliserais pas Joomla! si ça va à cette vitesse. Je demanderais à des potes de tester demain et si ils me disent pareil faudra trouver un autre hébergeur. Ce qui me fait mal au cul, c'est que c'est un dédié. Comme quoi on trouve de tout, je m'arrêterai là pour pas être méchant. C'est juste que la galerie morfeo mais 3 plombes à se charger. Quoiqu'il en soit je ferais le résumé du site,( comme si il tournait à une vitesse normale ) demain, dans l'optique de le vendre...**** 04-04-2010
07h36 : start 07h49 : Ah voilà ce que je cherchais hier : http://forum.joomla.fr/showthread.php?t=65146 Un moyen d'enlever les filtres sur la page de catégorie. En fait, c'était logique, fallait juste lire la barre d'adresse... 08h29 : et en fait c'est con ce que je dis parce que cela a été corrigé depuis, et c'est directement réglable depuis le menu... Mais ça m'a permis de voir l'override. 08h55 : et ça pour le javascript : http://w3blog.fr/2008/01/14/ajouter-un-script-javascript-avec-joomla/ Hélas joomla utilise mootools par défaut, et moi je préfère jquery. Charger les 2 en même temps, ça serait un peu lourd ? http://extensions.joomla.org/extensions/core-enhancements/scripts/7230 site très intéressant : http://joomla.cocoate.com/fr/Conception-de-composants-de-modules-et-de-plugins 09h20 : petite excursion : http://joomla.cocoate.com/fr/Creation-d-un-template-Joomla 10h00 : http://joomla.cocoate.com/fr/Principes-de-l-accessibilite 11h05 : remise en forme du site sous ie6 vite fait...c'est loin d'être bien mais c'est mieux que le site qu'il y a avait avant. Au début j'avais dit que mon site serait accessible, bon..., le site ne l'est pas actuellement, je n'ai pas encore pris les mesures nécessaires pour le faire. A voir, dans les prochaines évolutions, mais je place la priorité sur les nouveaux services... 11h12 : http://joomla.cocoate.com/fr/Conception-de-composants-de-modules-et-de-plugins 13h07 : la tête bourré de code, l'approche est simple mais il faut apprendre les nouvelles briques de base. Après une pause, je vais essayer de faire le site donné en exemple : http://joomla.cocoate.com/fr/Un-site-Web-complet-avec-Joomla (trop bien ce site) 14h16 : en faisant les mentions légales de l'autre site, j'en ai profité pour refaire les miennes, mais toujours pas de copine. 15h21 : adresse paypal création formulaire :: http://www.paypal.fr/boutons 16h05 : http://www.joomlafrance.org/telecharger http://extensions.joomla.org/ www.gotgtek.com : exposé 17h27 : ajout de l'espace de téléchargement réservé aux utilisateurs, qui leur permet de télécharger des pdf. lol, par contre niveau sécurité, c'est pas tout à fait ça : il suffit d'avoir l'adresse directe du pdf pour pouvoir télécharger. J'imagine qu'il faut donner un chemin d'accès compliqué pour éviter des fraudes ? Sinon mon ptit bout de site avance, et niveau je n'ai rien à redire, c'est impec!! Là je découvre, mais en mode production, ce que j'ai fait jusqu'à maintenant est torché en 30 minutes. ( disposition des pages principales et organisation du menu, module accès membre permettant à un utilisateur de s'inscrire, se connecter, récupérer ses identifiants... Les utilisateurs connectés ont droits à mes promotions, ce qui favorise la relation clientèle, lorsqu'ils se connectent : le menu promotion apparaît et propose 3 vins que j'ai configurés via Paypal, qu'ils peuvent acheter directement. Un module de photo en flash est intégré dans la page reportages. Les utilisateurs connectés accèdent à une plateforme de téléchrgement privilégiée qui leur permet de télécharger les pdf que j'ai choisis. ) 30 minutes pour ça, à vérifier si je m'emballe pas, mais franchement qui dit mieux ? 17h46 : ajout du formulaire de modification des coordonnées. choses de la vie... 00h22 : pfff, trop fastoche... Là, j'en ai mis que quelques uns, mais il y en a 2700 à télécharger sur ce site... http://www.joomla24.com/Joomla_1.5.x_Downloads.html Bon évidemment, ils sont pas finis, mais ça fait une bonne base... En fait, ce que va payer un client, c'est justement la kustomisation graphique du template, et l'intégration en css (et aussi la config joomla!). Faut voir à faire une offre intéressante. Vite oui, mais bien aussi. Pour l'instant j'en mets que 2 en démo, histoire de montrer que je sais faire le switch. Mais maintenant attaquons nous à la personnalisation du template proposé dans le tutoriel qui est déjà bien, mais il y a un bug d'affichage en ce qui me concerne sur le menu en position user3, peut être n'y a t-il tout simplement pas de position user 3 ? Bref, dans tous les cas ça m'intéresse de voir le css en oeuvre derrière afin de pouvoir le reproduire. 01h37 : bon là chui trop fatigué, je l'aurais bien mis en ligne mais bon, demain... Comme ça ça me laisse le temps d'aller plus en profondeur dans la kustomisation. Enfin bon demain, normalement je dois faire un myspace, plus un autre site à mettre en ligne, donc c'est un peu une journée morte pour ça...**** 03-04-2010
07h34 : start Mihihihi.... 07h54 : déplacement des logs php de tours annonces. Correction de quelques messages d'erreurs par rapport au log... 08h08 : free time 12h45 : http://www.glenan.fr/media/glenan.net_joomla_1.5.pdf 14h44 : apparemment plus personne ne vient sur le site Tours annonces. Dommage, et je n'ai aucun retour, ni positif, ni négatif. Est-ce lent ? Est-ce que le graphisme ne plaît pas ? Est-ce que le hack vous a fait peur ? Super motivant pour la suite... Bref,... pause 15h48 : vraiment pratique joomla! J'ai déjà un pseudo blog en place, en passant la moitié du temps à me documenter, en réalité, il y en a pour le temps de rentrer les contenus. Bien sûr le design est ... (ben moi il me convient mais bon) ... on va dire pas personnalisé. Fixons nous comme objectif le suivant : à la fin du mois, et donc avant de faire une session Tours annonces, créer 4 modèles de sites en ligne prêts à être exploités, afin d'allécher d'éventuels futurs clients, ou tout simplement comme porte folio virtuel. Peut être pas en mai car il y aura beaucoup de développement à faire sur Tours annonces, mais 2 mois plus tard : juillet : si je démarche dans la rue, j'aurai un portefolio à montrer et je pourrais vendre des sites. Bref, pour l'instant mon blog est quand même très laid... 00h40 : Déjà plus d'énergie pour aujourd'hui, le blog n'est pas vraiment fini sur Joomla! Demain j'ai un autre site à installer, mon joker ..., rien à voir avec Joomla... Aujourd'hui, je suis blasé, ...**** 02-04-2010
08h16 : start Bon là vraiment dernier jour de cette session... Vraiment parce que je les fonctionnalités qui manquent sont essentielles. Commençons par le système de rotation des tables des stats. Donc si je me rappelle ce que j'ai mis hier... une table statistique_totaux et un script qui : pour chaque jour sur une plage donné : -récupère les différents totaux définis manuellement dans statistique -insère les nombres obtenus dans statistique_totaux avec comme condition : si ajourd'hui est le jour sélectionné et qu'il existe une entrée à ce jour dans statistique_totaux: ajouter le total trouvé au total déjà existant dans statistique_totaux sinon remplacer le total -efface l'entrée (mettre un statu à on off plutôt) 09h10 : correction bug bobigny annonces : filtrage annonces similaires -- trucs chiants divers... 09h54 : modification de la structure des stats en vue d'une prise en compte par département. 12h41 : ajout de la catégorie multimédia... 15h15 : l'automodérateur est en place. Bon, hélas maintenant il faut trier les annonces multimedia dans les bonnes cat et je n'ai pas d'outils pour le faire. Il y a 521 résultats... pause... 16h24 : construction d'un outil pour changer rapidement de catégorie une annonce. 17h16 : les annonces multimédia sont rangées (au début j'me suis pas mal viandé (erreur de script) du coup les premières annonces doivent être mal rangées, chut, c'est un secret...) Bon ben voilà, je vais ENFIN pouvoir commencer ce mois tranquille. Ah non juste un dernier truc l'ananylse des stats dans une routine... juste une requête à copier coller ... select * from statistique where time > 10 ORDER by date_creation DESC une remarque intéressante : de nombreuses chaînes ont mis plus de 10 secondes à s'afficher et parmi elles des tentatives de faire chier le monde genre justement les requêtes d'hier : /annonces/liste-annonce?m=111-222-1933email@address.tst&t=date&s=1&y=w&j=37&r=2&n=0&p=1%20UNION%20SELECT%20NULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CCONCAT%2812%2C41071%2E38991%29%2CNULL%2CNULL%2CNULL%2CNUL Je ne sais pas si c'est une coincïdence, mais ces requêtes mettent toujours longtemps à s'afficher : Certainement le fait que je les mets en cache et qu'il faut donc créer un fichier long à générer. Cela pourrait nuire au serveur si un attaquant décidait de réitérer l'attaque de manière automatique à des heures de pointe : cela consommerait des ressources serveur pour rien. Je vais faire en sorte que les pages cachées ne soient cachées que si elles font au plus 100 caractères... 17h38 : Ca y est. Il faudrait que je mettes également un script qui liste tous les fichiers sur le serveur, et en local, et un autre qui retourne la différence, afin que je puisses détecter les backdoors... En fait je crois que à chaque fois que j'upload des fichiers sur le serveur, ils sont indisponibles pendant un petit laps de temps, ce qui doit causer des perturbations sur le front office. En fait ça serait bien si je ne faisais mes mises à jour que le soir par exemple... A réfléchir .. choses de la vie.... AAAAH enfin un bout de soirée pour moi... Bon ben joomla, le but c'est de gagner des thunes pour développer Tours annonces ou autre;.. Et la stratégie c'est de vendre des boutiques en ligne, en masse ,... Pour cela il me faut une productivité accrue, je sais travailler toute une journée sans m'arrêter pendant un mois. Enfin je me suis entraîner à être asociable afin de gagner du temps de travail. Pas de copine, pas d'ami, difficile des fois mais ... en contrepartie : Je peux fournir BEAUCOUP de travail, et tout le monde sait que le travail ça rapporte. Mettons en oeuvre cette stratégie. Ce mois-ci sera un mois d'apprentissage où j'essaierai de construire des boutiques en ligne le plus rapidement possible, avec la qualité au rendez-vous bien entendu, je ne tolérerai pas les clients mécontents.... Assez parlé,let's learn;.. Après quelques tests, le wysiwig est bien mais dangereux : il fait n'importe quoi au niveau du html. Heureusement, je veille quand c'est moi, mais quand ça sera au client de faire son propre article ... ouieaieaie ... tant pis, mise en page en tableaux (beurk...) tant pis, pensons au temps que nous allons gagner par la suite. 01h19 : Après un premier contact avec les quelques éléments basiques avec lesquels j'ai joué :: section categories, modules de menu : il semble que le code html du template utilise des balises jdoc qui servent à placer les élements, < jdoc:include type="modules" name="top" /> name="top" : une position pour le module : pratique... Plusieurs positions sont disponibles, et on peut facilement imaginer l'intérêt d'une telle découpe. Ca donne envie de faire des templates, et en vrai css (pas en tableau...) En fait, je sens mon empressement qui m'incite à vouloir tout tester tout de suite... Mais je veux faire les choses avec raison cette fois. Je vais me reposer et demain je créerai une sorte de blog site qui expose mes différents projets dont Tours annonces. Le but étant de mieux comprendre le principe de section catégories, ou du moins de l'apprendre par l'exemple concret, avant d'aller plus loin : apprendre à marcher avant de courir. Faire les choses avec intuition et envie c'est bien quand on ne sait pas ce que l'on veut : on découvre . Mais là moi je sais ce que je veux pour une fois, et la raison me sera un meilleur outil. Si j'ai bien taffé demain, il se peut donc que ce blog soit transféré. Quoique j'aurai certainement un myspace ce qui est pour moi un cauchemar éveillé de plusieurs heures ...**** 01-04-2010
09h00 : start lecture de mes logs, amélioration de la verbosité de mes messages d'erreur. La table statistique contient déjà 98 601 entrées, à surveiller... 10h41 : désactivation de l'affichage des messages d'erreur, je trouvais ça marrant au début, mais je me rends compte que cela incite les gens à tenter des trucs dérisoires comme l'injection sql ou d'autres trucs à 2 balles ... En plus ils doivent croire que c'est une faille (alors que c'était fait exprès mais bon). J'aime bien avoir l'erreur en face de moi, mais bon, moi au moins j'ai mes logs... En fait, j'hésite, ça peut être intéressant de laisser l'opportunité à une personne mal intentionnée de travailler pour moi et de déceler les petites failles, si je lui retire les messages d'erreur elle risque d'abandonner. Mais peut être ne suis-je pas lucide et l'attaque est ailleurs, genre gonfler le fichier de logs pour le faire exploser ?!, si c'est possible j'e sais rien... Bon, non je les laisse pas pour l'instant. 11h26 : ma session de débuggage par rapport au fichier de log vient tout juste de prendre fin, j'ai accourté mon investigation sinon j'y passerais la journée. Pourle backup d'une table ciblée, disons que phpmyadmin devrait faire l'affaire. Occupons nous du cache maintenant. pause ... 11h54 : je dois me mettre en garde moi même contre le système auquel j'avais pensé : me servir de la table de stats comme base pour recréer un cache adapté. En effet, certains tapent des trucs bizarres dans l'url, pour peu que je mettes le php.ini à allow_url_fopen à On, j'imagine même pas le résultat. Alors sois je filtre soigneusement les entrées à appeler, ou à insérer dans la table statistique, soit j'appelle un set de pages prédéfinies "manuellement" à chaque fois, et je pense opter pour cette 2ème solution, plus sécurisée. Toujours est-il que je suis toujours confronté au problème que php cli ne semble pas vouloir ouvrir une adresse bizarre, retestons cela... 12h25 : modif sur bobigny (mon correspondant est très actif, c'est bien, je favorise dans une certaine mesure sa créativité); ajout du signe beta sur sa bannière. 12h28 : désactivation de l'onglet evolution sur bobigny (pour l'instant). 12h33 : switch pour la partie web entre les différents départements (avant, erreur de ma part : les items s'affichaient dans tous les dpts) 13h20 : mise en place en ligne d'un moyen d'effacer le cache pour Tours et Bobigny dans l'admin. 13h38 : mise en place d'un système de recréation de cache manuel basique, juste pour tester fopen. Cela fonctionne correctement. 13h52 : implémentation fonctionnelle en ligne pour Tours d'un recréateur de cache manuel qui créé : les 10 premières pages naturelles (tri par défaut qui est date desc) de la liste toutes les catégories + 5 premières pages de véhicules + 5 premières pages de voitures + 5 premières pages de immobilier 13h57 : je me rends compte qu'une personne a cherché une annonce immobilière par prix, elle est allée à la page 7 puis 16. J'ai compris pourquoi, car le tri par prix affiche toutes les annonces qui n'ont pas de prix en premier. Cela est en fait indésirable, lors d'une recherche par prix il faudrait virer tous les prix qui sont NULL 14h11 : factorisation de la liste des caches à recréer. 14h42 : l'opération rafraîchir cache est disponible pour Tours dans l'admin. Elle consiste à effacer les caches des dossiers cibles et à recréer le set de cache de base tel que défini dans ma liste écrite manuellement. 15h26 : L'outil de rafraîchissement manuel est bien implémenté en ligne. pause : écriture de scénario de spots publicitaires pour l'annuaire libre...fun....je kif;) choses de la vie... 21h51 : kool, en fait le serveur peut très bien faire un fopen depuis cli, l'erreur était entre mon clavier et la chaise, comme d'hab. 22h53:: pfffff, mais vraiment des fois je mérite des baffes, je viens de refaire tout ce que j'ai fait aujourd'hui en bcp plus compact, propre et moins de temps. Non mais vraiment,... Des fois je conçois comme une merde et d'autre fois l'éclair survient dans ma tête et je SAIS comment organiser les datas pour qu'elles soient faciles à utiliser. Bref, du coup j'ai une classe tout simplement, et une seule qui gère le cache, et les différents chemins. Lancement de la tâche cron qui efface le cache toutes les heures. (En fait cette tâche ne sert à rien tant que l'automodérateur n'est pas actif, donc je vais la retirer pour l'instant) En regardant la table des stats, il faut faire quelque chose docteur, et en passant : lol 88.169.104.187 2010-04-01 07:58:45 /annonces/liste-annonce?m=111-222-1933email@address.tst&t=date&s=1&y=w&j=37&r=2&n=0&p=1%20UNION%20SELECT%20NULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CCONCAT%2812%2C74636%2E23035%29%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL-- Cette adresse ip s'acharne à tenter de l'injection sql, je lui souhaite bon courage. Si vous lisez ceci, voici un extrait de mon code : $sAddedWhereMots = " AND (a.titre LIKE :mots OR a.description LIKE :mots )"; et plus loin : $sWhere .= $sAddedWhereMots; $escapedMots = str_replace('%','\%',$mots); $pdoBindedValues['mots'] = array('%'. $escapedMots . '%', PDO::PARAM_STR); Bon courage tout de même... Bref,... Cette même personne m'a envoyé 579 spams; J'apprécie l'intérêt qu'elle porte à mon site. Bon pour revenir au sujet, la table gonfle très vite ... actuellement 169 059 entrées. Je ne sais pas combien de millions mysql peut gérer mais je préfère pas le savoir... Que me prescrivez-vous Wr Ling ? Hummm,,, Premièrement créez un script qui est capable de browser la table statistique et d'en déduire les stats jours par jour des parties qui vous intéressent (annonces, commerces, ...). Ce même script insérera le résultat dans une autre table : statistique_totaux qui recensera jour après jour les différents résultats. Avec cette technique, en admettant que votre script soit assez "malin" pour ne pas effacer les données existantes dans statistique_totaux, mais plutôt les mettre à jour, vous serez capables dans un second temps, de rappatrier votre table de statistique en local afin d'éventuellement pouvoir l'étudier tête reposée, mais vous pourrez également vider votre table de statistique en production, la table statistique_totaux prenant alors le relais. En fait, le script doit faire les 2 d'un coup : remplir la table statistique_totaux ET vider la table statistique. Et au niveau de l'affichage des statistiques sur le site, vous devrez afficher la somme de statistique_totaux et du jour courant dans statistique. Ainsi si vous lancez le script à 13h par exemple. Les données sont sauvées à 13h dans statistique_totaux et la table statistique est vidée. Le total des 2 tables donne toujours le bon nombre de statistiques. Si vous relancez le script 2 jours plus tard. La table statistique_totaux est alors mise à jour . Le point délicat se trouve ici : il faut ajouter les stats de la table statistique à la table statistique_totaux et non pas bêtement remplacer, car sinon vous perdrez les stats entre 00h et 13h pour l'exemple donné. A partir du moment où vous êtes sûr que votre script ajoute (pour la date courante) les stats plutôt que de les remplacer, il n'y a pas de réelle difficulté. La méthodologie à utiliser serait alors la suivante : 1. copie de la table statistique sur votre poste en local 2. lancement du script qui remplit la table statistique_totaux et vide statistique. ok très intéressant tout cela, mais j'ai plus envie de bosser là. Je fais ma fainéasse, mais je continuerais demain. JE SAIS, ça retarde de 2 jours tous mes autres projets. ... Qu'est-ce que je peux dire, je vais pas laisser ma table de stats exploser, déjà que le script met au moins 10 secondes à s'afficher, quelle plaie. Et puis pour mon confort personnel je suis obligé de faire l'automodérateur, je vais pas validé les annonces toute ma vie... Bon, demain sérieux j'arrête. (il avait dit ça hier...)