Cette contrib porte sur les extras des articles et est basée sur la contrib : Interface graphique pour les extras .
Pour les rubriques, je verrai ça après les tests. Ces modifications ont été testé avec Spip 1.7.1
Les modifications principales :
ecrire/article_edit.php3 :
extra_saisie($extra, ’articles’, $id_rubrique) ;
au lieu de :
extra_saisie($extra, ’articles’, $id_secteur) ;
ecrire/inc_extra.php3 :
// recherche rubrique parente éventuelle sur lequel s'applique des extras
function rub_extra($id_rub='') {
if($id_rub) {
$query="SELECT id_parent FROM spip_rubriques WHERE id_rubrique='$id_rub'";
$result=spip_query($query) or die($query);
list($id_rubparent)=spip_fetch_array($result);
if( $id_rubparent && isset($GLOBALS['champs_extra_proposes']['articles'][$id_rubparent]) ) {
return $id_rubparent;
} else {
return rub_extra($id_rubparent);
}
} else return 0;
}
// a partir de la liste des champs, generer la liste des input
function extra_saisie($extra, $type, $ensemble='') {
$extra = unserialize($extra);
// quels sont les extras de ce type d'objet
if (!$champs = $GLOBALS['champs_extra'][$type])
$champs = Array();
// prendre en compte, eventuellement, les champs presents dans la base
// mais oublies dans mes_options.
if (is_array($extra))
while (list($key,) = each($extra))
if (!$champs[$key])
$champs[$key] = "masque||($key?)";
// quels sont les extras proposes...
// pas d'extra pour cette ensemble, on va chercher un extra en remontant les niveaux
if ( $ensemble && $type=='articles' && !isset($GLOBALS['champs_extra_proposes'][$type][$ensemble]) ) {
$ensemble = rub_extra($ensemble); // on recherche si pour une rubrique de plus haut niveau, existe des extras
}
// ... si l'ensemble est connu
if ( $ensemble && isset($GLOBALS['champs_extra_proposes'][$type][$ensemble]) ) {
$champs_proposes = explode('|', $GLOBALS['champs_extra_proposes'][$type][$ensemble]);
// ... sinon, les champs proposes par defaut
} else if ( isset($GLOBALS['champs_extra_proposes'][$type]['tous']) ) {
$champs_proposes = explode('|', $GLOBALS['champs_extra_proposes'][$type]['tous']);
// sinon tous les champs extra du type
} else {
$champs_proposes = Array();
reset($champs);
while (list($ch, ) = each($champs)) $champs_proposes[] = $ch;
}
........ecrire/mes_options.php3 :
ça ne change pas beaucoup par rapport à ce qu’il y avait :
$GLOBALS['champs_extra_proposes'] = Array(
'articles'=>Array(
// nous aurons le champ personnalisé source et liens sur tous les articles de la rubrique 121 et de ses sous-rubriques
'121'=>'source|liens',
// nous aurons le champ liens sur tous les articles de la rubrique 2 et de ses sous-rubriques
'2'=>'liens',
// Attention, il faut obligatoirement mettre la ligne suivante si vos autres articles n'ont pas d'extras sinon ça ne fonctionne pas.
'tous'=>'',
),
........interface_mes_options.php3 :
Le script n’est pas complètement prêt, j’ai juste rajouter le menu déroulant avec l’arborescence du site, pour la rubrique à restreindre . Celà fonctionne en écriture, mais pas en lecture de la rubrique restreinte.
A installer d’abord : Interface graphique pour les extras
Script expérimental, à vous de tester ! J’attends vos remarques pour améliorer tout ça et continuer, parce que ce n’est pas fini...




inc_extra.zip
Vos commentaires
# Le 16 janvier 2006 à 22:33, par ppcm
En réponse à : Champ Extra sur les articles d’une rubrique et de ses sous-rubriques. (Mise à jour)
Pour que ceci fonctionne bien en 1.8.x, voici quelques modifications à apporter au hack :
Dans ecrire/inc_extra.php3
// recherche rubrique parente éventuelle sur lequel s’applique des extras
function rub_extra($type, $id_rub=’’)
if($id_rub)
$query="SELECT id_parent FROM spip_rubriques WHERE id_rubrique=’$id_rub’" ;
$result=spip_query($query) or die($query) ;
list($id_rubparent)=spip_fetch_array($result) ;
if( $id_rubparent && isset($GLOBALS[’champs_extra_proposes’][$type][$id_rubparent]) )
return $id_rubparent ;
else
return rub_extra($type, $id_rubparent) ;
else
return 0 ;
// a partir de la liste des champs, generer la liste des input
function extra_saisie($extra, $type, $ensemble=’’)
$extra = unserialize($extra) ;
// quels sont les extras de ce type d’objet
if (!$champs = $GLOBALS[’champs_extra’][$type])
$champs = Array() ;
// prendre en compte, eventuellement, les champs presents dans la base
// mais oublies dans mes_options.
if (is_array($extra))
while (list($key,) = each($extra))
if (!$champs[$key])
$champs[$key] = "masque||($key ?)" ;
// quels sont les extras proposes...
// pas d’extra pour cette ensemble, on va chercher un extra en remontant les niveaux
if ( $ensemble && !isset($GLOBALS[’champs_extra_proposes’][$type][$ensemble]) )
$ensemble = rub_extra($type, $ensemble) ; // on recherche si pour une rubrique de plus haut niveau, existe des extras
// ... si l’ensemble est connu
if ($ensemble && isset($GLOBALS[’champs_extra_proposes’][$type][$ensemble]))
$champs_proposes = explode(’|’, $GLOBALS[’champs_extra_proposes’][$type][$ensemble]) ;
// ... sinon, les champs proposes par defaut
else if (isset($GLOBALS[’champs_extra_proposes’][$type][’tous’]))
$champs_proposes = explode(’|’, $GLOBALS[’champs_extra_proposes’][$type][’tous’]) ;
// sinon tous les champs extra du type
else
$champs_proposes = Array() ;
reset($champs) ;
while (list($ch, ) = each($champs)) $champs_proposes[] = $ch ;
...
Ainsi ceci marchera avec les rubriques, sous-rubriques et articles
# Le 22 janvier 2006 à 14:30, par ppcm
En réponse à : Champ Extra sur les articles d’une rubrique et de ses sous-rubriques. (Mise à jour)
J’oubliais qu’il fallait aussi modifier ecrire/rubriques_edit.php3, en remplaçant :
extra_saisie($extra, ’rubriques’, $id_secteur) ;
par
extra_saisie($extra, ’rubriques’, $id_rubrique) ;
Répondre à ce message
# Le 14 juillet 2005 à 17:17, par Alain100
En réponse à : > Champ Extra sur les articles d’une rubrique et de ses sous-rubriques. (Mise à jour)
Bonjour,
très belle contribution, utile pour les utilisateue 1.7 mais ne fonctionne pas sur 1.8. :( Est-ce que quelqu’un pourrais l’adapter, cela serait très utile
merci
Alain
Répondre à ce message