No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

squelettes_par_rubrique_options.php 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2019 *
  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. /**
  12. * Déclarations de pipelines
  13. *
  14. * @package SPIP\SquelettesParRubrique\Pipelines
  15. **/
  16. if (!defined('_ECRIRE_INC_VERSION')) {
  17. return;
  18. }
  19. if (!isset($GLOBALS['spip_pipeline']['styliser'])) {
  20. $GLOBALS['spip_pipeline']['styliser'] = '';
  21. }
  22. // Ajoute à la fin du pipeline styliser la recherche de squelettes par rubriques et par langue
  23. $GLOBALS['spip_pipeline']['styliser'] .= '||squelettes_par_rubrique_styliser_par_rubrique|squelettes_par_rubrique_styliser_par_langue';
  24. /**
  25. * Cherche un squelette par rubrique squelette-XX.html ou squelette=XX.html
  26. *
  27. * Options de recherche de squelette par le styliseur, appelé par le pipeline 'styliser'
  28. *
  29. * @pipeline styliser
  30. *
  31. * @param array $flux Données du pipeline
  32. * @return array Données du pipeline
  33. */
  34. function squelettes_par_rubrique_styliser_par_rubrique($flux) {
  35. // uniquement si un squelette a ete trouve
  36. if ($squelette = $flux['data']) {
  37. $ext = $flux['args']['ext'];
  38. // On selectionne, dans l'ordre :
  39. // fond=10
  40. if ($id_rubrique = $flux['args']['id_rubrique']) {
  41. $f = "$squelette=$id_rubrique";
  42. if (@file_exists("$f.$ext")) {
  43. $squelette = $f;
  44. } else {
  45. $maxiter = 10000; // on ne remonte pas au dela en profondeur
  46. // fond-10 fond-<rubriques parentes>
  47. do {
  48. $f = "$squelette-$id_rubrique";
  49. if (@file_exists("$f.$ext")) {
  50. $squelette = $f;
  51. break;
  52. }
  53. } while (
  54. $maxiter--
  55. and $id_rubrique = quete_parent($id_rubrique)
  56. // se proteger des references circulaires
  57. and $id_rubrique != $flux['args']['id_rubrique']
  58. );
  59. }
  60. // sauver le squelette
  61. $flux['data'] = $squelette;
  62. }
  63. }
  64. return $flux;
  65. }
  66. /**
  67. * Cherche l'existence un squelette par langue squelette.en.html
  68. *
  69. * Options de recherche de squelette par le styliseur, appelé par le pipeline 'styliser'
  70. *
  71. * @pipeline styliser
  72. *
  73. * @param array $flux Données du pipeline
  74. * @return array Données du pipeline
  75. */
  76. function squelettes_par_rubrique_styliser_par_langue($flux) {
  77. // uniquement si un squelette a ete trouve
  78. if ($squelette = $flux['data']) {
  79. $ext = $flux['args']['ext'];
  80. // Affiner par lang
  81. if ($lang = $flux['args']['lang']) {
  82. $l = lang_select($lang);
  83. $f = "$squelette." . $GLOBALS['spip_lang'];
  84. if ($l) {
  85. lang_select();
  86. }
  87. if (@file_exists("$f.$ext")) {
  88. // sauver le squelette
  89. $flux['data'] = $f;
  90. }
  91. }
  92. }
  93. return $flux;
  94. }