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...
Discussions par date d’activité
2 discussions
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
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);
Reply to this message
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
Reply to this message
Ajouter un commentaire
Follow the comments:
|
