squelettes_par_rubrique_options.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2014 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
  9. * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. if (!defined("_ECRIRE_INC_VERSION")) return;
  12. if (!isset($GLOBALS['spip_pipeline']['styliser']))
  13. $GLOBALS['spip_pipeline']['styliser'] = '';
  14. $GLOBALS['spip_pipeline']['styliser'] .= '||squelettes_par_rubrique_styliser_par_rubrique|squelettes_par_rubrique_styliser_par_langue';
  15. /**
  16. * Options de recherche de squelette par le styliseur, appele par le pipeline 'styliser' :
  17. * Squelette par rubrique squelette-XX.html ou squelette=XX.html
  18. *
  19. * @param <type> $flux
  20. * @return <type>
  21. */
  22. function squelettes_par_rubrique_styliser_par_rubrique($flux) {
  23. // uniquement si un squelette a ete trouve
  24. if ($squelette = $flux['data']) {
  25. $ext = $flux['args']['ext'];
  26. // On selectionne, dans l'ordre :
  27. // fond=10
  28. if ($id_rubrique = $flux['args']['id_rubrique']) {
  29. $f = "$squelette=$id_rubrique";
  30. if (@file_exists("$f.$ext"))
  31. $squelette = $f;
  32. else {
  33. $maxiter = 10000; // on ne remonte pas au dela en profondeur
  34. // fond-10 fond-<rubriques parentes>
  35. do {
  36. $f = "$squelette-$id_rubrique";
  37. if (@file_exists("$f.$ext")) {
  38. $squelette = $f;
  39. break;
  40. }
  41. } while (
  42. $maxiter--
  43. AND $id_rubrique = quete_parent($id_rubrique)
  44. // se proteger des references circulaires
  45. AND $id_rubrique != $flux['args']['id_rubrique']
  46. );
  47. }
  48. // sauver le squelette
  49. $flux['data'] = $squelette;
  50. }
  51. }
  52. return $flux;
  53. }
  54. /**
  55. * Options de recherche de squelette par le styliseur, appele par le pipeline 'styliser' :
  56. * Squelette par langue squelette.en.html
  57. *
  58. * @param array $flux
  59. * @return array
  60. */
  61. function squelettes_par_rubrique_styliser_par_langue($flux) {
  62. // uniquement si un squelette a ete trouve
  63. if ($squelette = $flux['data']) {
  64. $ext = $flux['args']['ext'];
  65. // Affiner par lang
  66. if ($lang = $flux['args']['lang']) {
  67. $l = lang_select($lang);
  68. $f = "$squelette.".$GLOBALS['spip_lang'];
  69. if ($l) lang_select();
  70. if (@file_exists("$f.$ext")) {
  71. // sauver le squelette
  72. $flux['data'] = $f;
  73. }
  74. }
  75. }
  76. return $flux;
  77. }