Dotclear

Vous n'êtes pas identifié(e).

Annonce

#1 2010-10-28 13:01:35

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

[defaultPost] Adoption

Bonjour

J'ai le plaisir d'adopter le plugin defaultPost de Xavier Gouchet. Celui-ci ne pouvant plus s'en occuper mais étant d'accord pour le laisser évoluer, je l'ai mis à jour pour Dotclear 2.2. Pendant que j'y étais, j'ai ajouté quelques fonctionnalités et amélioré son utilisation :

Je rappelle que le plugin permet de créer un modèle de billet qui sera repris par tous les nouveaux billets créés. Il ajoute une entrée "Billet modèle" dans le menu Blog, qui permet de configurer le plugin et de saisir un billet-modèle.

Les changements :

- compatibilité Dotclear 2.2 uniquement
- module d'aide intégré
- plus besoin de copier du code dans les fichiers du core de Dotclear, les nouveaux billets sont pré-remplis en javascript
- les différentes syntaxes de saisie disponibles sont acceptées pour l'extrait et le contenu
- quelques options sont proposées en plus :
    - choix de la catégorie,
    - état du billet
    - date de publication
    - syntaxe de saisie (wiki ou xhtml),
    - ouverture ou non des commentaires et trackbacks
    - sélection du billet

(il est à noter que ces options prennent le pas sur les options définies par l'utilisateur pour les nouveaux billets, et qu'aucun champ n'est obligatoire, on peut donc s'en servir par exemple uniquement pour renseigner le champ post_notes d'un billet...)

Il me reste éventuellement à ajouter des options supplémentaires (langue, mot de passe, tags et pièces attachées si possible) si cela semble utile ;)

Le plugin : http://philippe.dissitou.org/public/plu … -1.2.1.zip

Merci pour vos remarques et vos conseils d'évolution :)

Hors ligne

#2 2010-10-29 05:58:49

zeiram
Membre
Inscription : 2004-06-27
Site Web

Re : [defaultPost] Adoption

Petite question : pour le choix de la date de publication, est-ce possible d'avoir une option du genre "(date du dernier billet programmé ou publié) + 24h" ? (Je sais, c'est très spécifique à mon utilisation de Dotclear, mais l'espoir fait vivre ;-) )


« Y a des jours où faut pas m'chercher !! Et y a des jours tous les jours ! »

Hors ligne

#3 2010-10-29 07:23:58

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : [defaultPost] Adoption

Huhu, zeiram, étant donnés nos niveaux de compétences respectifs, je te retournerais la question bien volontiers ;) Je le note toutefois.

En attendant, la version 1.2.2 permet en plus de choisir la langue du billet et le mot de passe.

Je m'attaque maintenant aux tags, mais c'est un peu plus compliqué^^

Hors ligne

#4 2010-10-29 07:44:34

Tomtom33
Responsable des travaux finis
Lieu : Barcelone
Inscription : 2006-06-13

Re : [defaultPost] Adoption

Salut Amalgame.

J'avais développé un plugin similaire pour dc1 et eu beaucoup demandes pour la fonctionnalités suivante : La possibilité de créer plusieurs modèles de billet et de les charger via une liste déroulante sur l'interface d'édition (comme gmail avec les réponses standardisées). De plus je pense savoir quelle architecture proposer ce qui au passage, simplifierai énormément le plugin. Si tu veux en discuter en privé, tu as mon mail ;)

Bon, je te poste ça parce que cela ne m'étonnerai pas que ça ressorte tôt ou tard donc autant que tu sois préparé hein ;)


Le lab => http://lab.dotclear.org
Besoin d'un plugin? => http://plugins.dotaddict.org
Besoin d'un thème? => http://themes.dotaddict.org
Besoin d'une astuce? => http://tips.dotaddict.org

Hors ligne

#5 2010-10-29 07:51:09

Jean-Michel
Modérateur à ailes d'ange
Lieu : Paris
Inscription : 2006-08-22
Site Web

Re : [defaultPost] Adoption

zeiram a écrit :

Petite question : pour le choix de la date de publication, est-ce possible d'avoir une option du genre "(date du dernier billet programmé ou publié) + 24h" ? (Je sais, c'est très spécifique à mon utilisation de Dotclear, mais l'espoir fait vivre ;-) )

Je ne sais pas si ça répond à ta demande complétement mais JcDenis avait developpé suite à un de mes tickets sur le Lab, le plugin Periodical.

Hors ligne

#6 2010-10-29 08:04:06

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : [defaultPost] Adoption

@Tomtom : non seulement j'avais prévu cette évolution, mais j'avais pensé que ça attirerait un sorcier ;p

(pour l'architecture, je pense qu'il faudrait stocker simplement les modèles en base, sans doute dans la table post avec juste un post_type "model", je me trompe beaucoup ? Si tu veux m'aider et t'atteler à ce travail, je peux verser le plugin sur le Lab, et je m'occuperai du js pour récupérer et insérer les pings et les tags)

Hors ligne

#7 2010-10-29 08:15:24

Tomtom33
Responsable des travaux finis
Lieu : Barcelone
Inscription : 2006-06-13

Re : [defaultPost] Adoption

amalgame a écrit :

@Tomtom : non seulement j'avais prévu cette évolution, mais j'avais pensé que ça attirerait un sorcier ;p

(pour l'architecture, je pense qu'il faudrait stocker simplement les modèles en base, sans doute dans la table post avec juste un post_type "model", je me trompe beaucoup ? Si tu veux m'aider et t'atteler à ce travail, je peux verser le plugin sur le Lab, et je m'occuperai du js pour récupérer et insérer les pings et les tags)

C'est exactement ça. Tu as juste à copier les fichiers posts.php et post.php, adapter pour afficher la liste des posts ayant ton post_type et voilà :)
Par contre, ça me parait difficilement faisable pour les pièces jointes et tags car tu as besoin du post_id pour les enregistrer. A moins que tu passes par le behavior corePostAfterCreate pour les ajouter après coup...


Le lab => http://lab.dotclear.org
Besoin d'un plugin? => http://plugins.dotaddict.org
Besoin d'un thème? => http://themes.dotaddict.org
Besoin d'une astuce? => http://tips.dotaddict.org

Hors ligne

#8 2010-10-29 08:26:00

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : [defaultPost] Adoption

Pour les pièces jointes je suis d'accord, il faut que le billet ait un id. Toutefois pour les tags je pense que c'est faisable : en effet, il est possible de mettre des tags sur un nouveau billet ;)

En récupérant le behavior adminPostFormSidebar je peux ajouter des tags sur mon modèle. Lorsqu'on ajoute des tags, le contenu du bloc <ul class="metaList"> est rempli des éléments choisis. Je peux le récupérer en javascript, et l'insérer dans le nouveau billet, non ?

Hors ligne

#9 2010-10-29 08:33:41

Tomtom33
Responsable des travaux finis
Lieu : Barcelone
Inscription : 2006-06-13

Re : [defaultPost] Adoption

amalgame a écrit :

Pour les pièces jointes je suis d'accord, il faut que le billet ait un id. Toutefois pour les tags je pense que c'est faisable : en effet, il est possible de mettre des tags sur un nouveau billet ;)

En récupérant le behavior adminPostFormSidebar je peux ajouter des tags sur mon modèle. Lorsqu'on ajoute des tags, le contenu du bloc <ul class="metaList"> est rempli des éléments choisis. Je peux le récupérer en javascript, et l'insérer dans le nouveau billet, non ?

Même pas besoin de faire ça. Si tu copies le post.php pour l'enregistrement de tes modèles, tu auras exactement le même comportement que pour les billets. il suffira alors des créer ton modèle ajouter les tags et cliquer sur enregistrer et tout sera sauvegardé comme un billet.

Après, une fois sur l'interface d'édition de billet, via un behavior étendant le formulaire, tu ajoutes une combo box contenant la liste des modèles et au clic sur un boutton "charger" par exemple, cela appelle via ajax un service qui te renvoi toutes les infos concernant le modèle (http://fr.dotclear.org/documentation/2. … s/services). Il suffit alors de les placer correctement dans chaque champ ;)


Le lab => http://lab.dotclear.org
Besoin d'un plugin? => http://plugins.dotaddict.org
Besoin d'un thème? => http://themes.dotaddict.org
Besoin d'une astuce? => http://tips.dotaddict.org

Hors ligne

#10 2010-10-29 09:02:26

zeiram
Membre
Inscription : 2004-06-27
Site Web

Re : [defaultPost] Adoption

amalgame a écrit :

Huhu, zeiram, étant donnés nos niveaux de compétences respectifs, je te retournerais la question bien volontiers ;) Je le note toutefois.

Bon, j'ai relevé le défi... et j'ai quelque chose de pas propre du tout, mais qui fonctionne. Pas propre du tout car j'ai dû désactiver le calendrier sur la date et que l'utilisateur doit écrire "next day" dans le champ date pour que le truc se mette en marche. (Une solution plus propre serait peut-être d'ajouter une liste déroulante sous le champ date offrant un choix d'intervalles à ajouter.)

Voici le diff de mes modifications :

diff -u -r defaultPost/_admin.php defaultPost.new/_admin.php
--- defaultPost/_admin.php	2010-10-28 18:00:56.000000000 +0200
+++ defaultPost.new/_admin.php	2010-10-29 10:59:39.897482800 +0200
@@ -29,7 +29,22 @@
 		$s =& $core->blog->settings->defaultPost;
 		$as = unserialize($s->defaultPost_options);
 		
-		$post_dt = $as['post_dt'] == '' ?  '' : date('Y-m-d H:i:00',$as['post_dt']);
+		if ($as['post_dt'] == '') {
+			$post_dt = '';
+		} else if ($as['post_dt'] == 'next day') {
+			// Get the newest published post
+			$rs_pub = $core->blog->getPosts(array ('limit' => 1, 'post_status' => 1));
+			$pubMaxDate = strtotime($rs_pub->post_dt);
+			// Get the newest programmed post
+			$rs_prog = $core->blog->getPosts(array ('limit' => 1, 'post_status' => -1));
+			$progMaxDate = strtotime($rs_prog->post_dt);
+			// Find which one is the newest
+			$post_dt = $pubMaxDate < $progMaxDate ? $progMaxDate : $pubMaxDate;
+			// Add 24h
+			$post_dt = date('Y-m-d H:i', $post_dt + 24*3600);
+		} else {
+			$post_dt = date('Y-m-d H:i',$as['post_dt']);
+		}
 		$post_lang = $as['post_lang'] == '' ? $core->auth->getInfo('user_lang') : $as['post_lang'];
 		
 		if ($s->defaultPost_active) {			
@@ -74,4 +89,4 @@
 		}
 	}
 }   
-?>
\ Pas de fin de ligne `a la fin du fichier.
+?>
diff -u -r defaultPost/index.php defaultPost.new/index.php
--- defaultPost/index.php	2010-10-29 09:17:12.000000000 +0200
+++ defaultPost.new/index.php	2010-10-29 11:00:44.725192900 +0200
@@ -97,7 +97,15 @@
 	$s->put('defaultPost_excerpt',$_POST['post_excerpt'],'string');
 	$s->put('defaultPost_notes',$_POST['post_notes'],'string');
 	
-	$post_dt = empty($_POST['post_dt']) ? '' : strtotime($_POST['post_dt']);
+		if (!empty($_POST['post_date'])) {
+			if ($_POST['post_date'] == 'next day') {
+				$post_dt = 'next day';
+			} else {
+				$post_dt = strtotime($_POST['post_date']);
+			}
+		} else {
+			$post_dt = '';
+		}
     
 	$opts = array(
 			'cat_id' => $_POST['cat_id'],
@@ -191,6 +199,13 @@
     
 		<?php $as = unserialize($s->defaultPost_options);
 		
+		if ($as['post_dt'] == 'next day') {
+			$display = 'next day';
+		} else if ($as['post_dt'] != '') {
+			$display = date('Y-m-d H:i:00', $as['post_dt']);
+		} else {
+			$display = '';
+		}
 		echo 
 		
 		'<div id="entry-sidebar">'.
@@ -204,7 +219,7 @@
 		'</label></p>'.
 		
 		'<p><label>'.__('Published on:').
-		form::field('post_dt',16,16,$as['post_dt'] == '' ?  '' : date('Y-m-d H:i:00',$as['post_dt']),'',3).
+		form::field('post_date',16,16,$display,'',3).
 		'</label></p>'.
 		
 		'<p><label>'.__('Text formating:').dcPage::help('post','p_format').
diff -u -r defaultPost/js/_post.js defaultPost.new/js/_post.js
--- defaultPost/js/_post.js	2010-10-28 16:24:14.000000000 +0200
+++ defaultPost.new/js/_post.js	2010-10-29 10:13:50.865163800 +0200
@@ -29,9 +29,9 @@
 		
 		//Date picker
 		
-		var post_dtPick = new datePicker($('#post_dt').get(0));
-		post_dtPick.img_top = '1.5em';
-		post_dtPick.draw();
+//		var post_dtPick = new datePicker($('#post_dt').get(0));
+//		post_dtPick.img_top = '1.5em';
+//		post_dtPick.draw();
 		
 		// Hide some fields
 		$('#notes-area label').toggleWithLegend($('#notes-area').children().not('label'),{
@@ -48,4 +48,4 @@
 		
 		
 	}
-});
\ Pas de fin de ligne `a la fin du fichier.
+});

« Y a des jours où faut pas m'chercher !! Et y a des jours tous les jours ! »

Hors ligne

#11 2010-10-29 09:05:58

zeiram
Membre
Inscription : 2004-06-27
Site Web

Re : [defaultPost] Adoption

Jean-Michel a écrit :
zeiram a écrit :

Petite question : pour le choix de la date de publication, est-ce possible d'avoir une option du genre "(date du dernier billet programmé ou publié) + 24h" ? (Je sais, c'est très spécifique à mon utilisation de Dotclear, mais l'espoir fait vivre ;-) )

Je ne sais pas si ça répond à ta demande complétement mais JcDenis avait developpé suite à un de mes tickets sur le Lab, le plugin Periodical.

Oui, je connais Periodical. Il ne me convient absolument pas car il sélectionne un billet au hasard dans les billets en attente. Or j'accorde beaucoup d'importance à l'ordre de publication de mes photos... c'est pourquoi avoir un billet dont la date est choisie par défaut au premier jour n'ayant pas encore de billet prévu me convient le mieux. ;-)


« Y a des jours où faut pas m'chercher !! Et y a des jours tous les jours ! »

Hors ligne

#12 2010-10-29 09:10:34

Tomtom33
Responsable des travaux finis
Lieu : Barcelone
Inscription : 2006-06-13

Re : [defaultPost] Adoption

Tomtom33 a écrit :

Après, une fois sur l'interface d'édition de billet, via un behavior étendant le formulaire, tu ajoutes une combo box contenant la liste des modèles et au clic sur un boutton "charger" par exemple, cela appelle via ajax un service qui te renvoi toutes les infos concernant le modèle (http://fr.dotclear.org/documentation/2. … s/services). Il suffit alors de les placer correctement dans chaque champ ;)

Pour que tu évites de galérer avec ça, je te file le code du service, j'avais ça dans mes cartons:

class defaultPostRestMethods
{
	public static function getModel($core,$get)
	{
		$id = array_key_exists('id',$get) ? (integer) $get['id'] : null;
		
		if (is_null($id) || !is_int($id)) {
			throw new Exception(__('No ID given'));
		}
		
		$rs = $core->blog->getPosts(array('post_id' => $id,'post_type' => 'model'));
		
		if ($rs->isEmpty()) {
			throw new Exception(__('Post does not exist'));
		}
		
		$rsp = new xmlTag();
		
		foreach ($rs->row() as $var => $data) {
			if (is_string($var)) {
				$rsp->{$var}($data);
			}	
		}
		
		return $rsp;
	}
}

Il suffit que tu suives la doc pour le déclarer ainsi que l’appeler ;)


Le lab => http://lab.dotclear.org
Besoin d'un plugin? => http://plugins.dotaddict.org
Besoin d'un thème? => http://themes.dotaddict.org
Besoin d'une astuce? => http://tips.dotaddict.org

Hors ligne

#13 2010-10-30 15:45:08

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : [defaultPost] Adoption

Le plugin passe en version 1.2.3 pour ajouter :

- le champ URL spécifique (attention ;) )
- les tags

Mon premier objectif est rempli : le formulaire de saisie du modèle propose toutes les options d'un nouveau billet \o/

(note : il y a un petit bug si vous mettez à jour depuis la version précédente. En effet les options (sidebar du formulaire) sont sérialisées et ne sont pas écrasées par la mise à jour. Il faut enregistrer au moins une fois les réglages pour que tout rentre dans l'ordre)

La prochaine évolution permettra d'avoir plusieurs modèles de billets, comme suggéré par Tomtom.

Dans cette optique, j'ai toutefois une question : en l'état, je peux enregistrer un modèle de billet sans titre ni contenu, mais si j'inscris les modèles en base ces deux valeurs seront obligatoires. Comment différencier le titre du modèle de celui du billet qu'il doit générer ?

Hors ligne

#14 2010-10-30 16:31:31

Tomtom33
Responsable des travaux finis
Lieu : Barcelone
Inscription : 2006-06-13

Re : [defaultPost] Adoption

Une méta


Le lab => http://lab.dotclear.org
Besoin d'un plugin? => http://plugins.dotaddict.org
Besoin d'un thème? => http://themes.dotaddict.org
Besoin d'une astuce? => http://tips.dotaddict.org

Hors ligne

#15 2010-10-30 17:59:02

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : [defaultPost] Adoption

Oui, mais c'est possible sans myMeta, parce que je ne veux pas dépendre d'un autre plugin ?

Hors ligne

#16 2010-10-30 18:02:22

Tomtom33
Responsable des travaux finis
Lieu : Barcelone
Inscription : 2006-06-13

Re : [defaultPost] Adoption

Bien sur, mymeta ne fait qu'utiliser le système de méta pour être entièrement configurable. Ca n'empêche pas d'autres plugins d'utiliser les mêmes choses ;)


Le lab => http://lab.dotclear.org
Besoin d'un plugin? => http://plugins.dotaddict.org
Besoin d'un thème? => http://themes.dotaddict.org
Besoin d'une astuce? => http://tips.dotaddict.org

Hors ligne

#17 2010-10-31 23:00:32

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : [defaultPost] Adoption

Bonsoir

Voici la version 1.2.4 du plugin, qui prend maintenant en compte le plugin pings.

Je pense en avoir fini pour cette version (sauf s'il y a des bugs...). La suivante proposera plusieurs modèles de billets, mais ce sera sous un autre nom ;)

Hors ligne

#18 2010-11-01 07:55:04

osku
Membre
Lieu : 28
Inscription : 2005-06-15

Re : [defaultPost] Adoption

Sympathique :)

Mais pour être chipoter :
1°) j'aurais placé l'extension dans le menu [EXTENSIONS] puisqu'à mon sens il ne s'agit pas d'un ajout de contenu comme pages, galeries.
2°) dans le titre tu utilises un > ou lieu de › dans le titre de la page de l'extension.
3°) j'aurais interverti les deux onglets aussi.
4°) templator ajoute une liste déroulante du choix du template. Est-ce que ton ploug mémorise ce choix ?

Hors ligne

#19 2010-11-01 08:08:58

zeiram
Membre
Inscription : 2004-06-27
Site Web

Re : [defaultPost] Adoption

Bon, moi je propose la version 1.2.4b du plugin qui ajoute la possibilité de dire que la date du nouveau billet doit être un intervalle de temps plus tard que le dernier billet publié ou programmé. Cette fois-ci, c'est fait proprement via une liste déroulante permettant de sélectionner l'intervalle voulu. Il manque juste la traduction de quelques petits textes. :-)


« Y a des jours où faut pas m'chercher !! Et y a des jours tous les jours ! »

Hors ligne

#20 2010-11-01 09:24:55

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : [defaultPost] Adoption

@osku :
1) d'accord pour le déplacement dans le menu extensions, tu n'es d'ailleurs pas le premier à le dire
2) ah ? c'est vraiment chipoter mais je le modifierai, tant qu'à essayer de faire les choses bien...
3) là ça se discute, en l'état l'onglet par défaut est différent selon que le plugin est activé ou pas
4) non, il faut le coder mais c'est une bonne idée, j'installerai templator et je ferai la modification nécessaire (d'un autre côté je me vois mal recenser tous les plugins qui ajoutent quelque chose dans la sidebar d'édition d'un billet... bref c'est bien parce que c'est toi, hein)

@zeiram : merci pour le patch, je vais regarder comment l'intégrer dans les paramètres et je m'occuperai en passant des traductions manquantes

Hors ligne

#21 2010-11-01 09:54:21

zeiram
Membre
Inscription : 2004-06-27
Site Web

Re : [defaultPost] Adoption

Mon dernier lien n'est pas un patch : c'est le plugin complet et modifié...


« Y a des jours où faut pas m'chercher !! Et y a des jours tous les jours ! »

Hors ligne

#22 2010-11-01 09:56:04

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : [defaultPost] Adoption

C'est encore mieux alors :P

Hors ligne

#23 2010-11-01 12:44:55

zeiram
Membre
Inscription : 2004-06-27
Site Web

Re : [defaultPost] Adoption

amalgame a écrit :

@osku :
3) là ça se discute, en l'état l'onglet par défaut est différent selon que le plugin est activé ou pas

Mais cela implique, pour quelqu'un qui n'a pas JavaScript activé, qu'il verra toujours en premier les options d'activation ou non du plugin. Ce qui peut s'avérer rapidement particulièrement soûlant... (je pense surtout aux utilisateurs de synthèse vocale là).


« Y a des jours où faut pas m'chercher !! Et y a des jours tous les jours ! »

Hors ligne

#24 2010-11-01 15:36:44

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : [defaultPost] Adoption

zeiram a écrit :

Mais cela implique, pour quelqu'un qui n'a pas JavaScript activé, qu'il verra toujours en premier les options d'activation ou non du plugin. Ce qui peut s'avérer rapidement particulièrement soûlant... (je pense surtout aux utilisateurs de synthèse vocale là).

Oui, l'onglet "paramètres" est dans le flux avant l'onglet "édition", mais il est beaucoup plus court, et dans tous les cas le tabindex amène sur le titre du billet juste après le h1 de la page. Maintenant, je ne sais pas avec une synthèse vocale, mais au clavier ça ne dérange pas ;)

D'un autre côté, l'utilisateur sans javascript ne verra pas beaucoup d'utilité au plugin : il ne marchera tout simplement pas, c'est d'ailleurs son très gros défaut, et je n'ai pas trouvé comment le faire autrement faute de behavior à intercepter avant l'ouverture du formulaire "nouveau billet". Si quelqu'un a une idée à ma portée, je suis preneur.

Hors ligne

#25 2010-11-01 16:08:51

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : [defaultPost] Adoption

amalgame a écrit :

...mais au clavier ça ne dérange pas ;)

Oui, bon, je n'ai rien dit, après un peu plus de tests c'est effectivement plus pratique d'inverser les onglets :p

Hors ligne

Vous n'êtes pas identifié(e).

Pied de page des forums

Sites map