Skip to content
Extraits de code Groupes Projets
  1. déc. 16, 2010
    • cerdic's avatar
      methode skip() generique sur la classe Iter, qui permet de retrouver une... · 57bb1253
      cerdic a rédigé
      methode skip() generique sur la classe Iter, qui permet de retrouver une balise #SAUTER fonctionnelle
      57bb1253
    • cerdic's avatar
      documentation de l'iterateur IterDATA · a13d5fc3
      cerdic a rédigé
      a13d5fc3
    • cerdic's avatar
      documentation de IterEnum, et utilisation de pos/total en conformite avec Iter · 37876a4c
      cerdic a rédigé
      Suppression de seek(), la methode parent fait cela tres bien (et avec moins de bug)
      37876a4c
    • cerdic's avatar
      Documentation des iterateurs Iter et IterSQL · 079e1d19
      cerdic a rédigé
      Utiliser protected plutot que private, pour permettre des surcharges eventuelles
      proteger les 3 proprietes de Iter, qui ne doivent pas etre accedees en direct
      Ajout des proprietes pos et total qui memorisent la position courant et le nombre total de resultat
      Implementations par defaut dans Iter, qui gerent la mise a jour de pos et total
      Debog de la methode seek() de IterSQL qui ne prenait pas en compte correctement le saut
      079e1d19
    • cerdic's avatar
      Report de r16745 · 850075fa
      cerdic a rédigé
      850075fa
    • Fil's avatar
      reecriture de tous les iterateurs sur le mode de la class Iterator de PHP · 084372dc
      Fil a rédigé
      http://php.net/manual/fr/class.iterator.php
      
      il devient possible de faire :
      
      {{{
      <?php
      $s = new IterSQL(
      
      array (
          'select' => 
          array (
            0 => 'articles.date',
            1 => 'articles.id_article',
            2 => 'articles.id_rubrique',
            3 => 'articles.titre',
            5 => 'articles.descriptif',
            6 => 'articles.chapo',
            7 => 'articles.lang',
          ),
          'from' => 
          array (
            'articles' => 'spip_articles',
          ),
          'type' => 
          array (
          ),
          'where' => 
          array (
            0 => 
            array (
              0 => '=',
              1 => 'articles.statut',
              2 => '\'publie\'',
            ),
            1 => '1=1',
          ),
          'join' => 
          array (
          ),
          'groupby' => 
          array (
          ),
          'orderby' => 
          array (
            0 => 'articles.date DESC',
          ),
          'limit' => '0,1',
          'having' => 
          array (
          ),
          'table' => 'articles',
          'id' => '_articles_recents',
          'connect' => '',
        )
      
      );
      
      foreach ($s as $k=>$v) {
      	var_dump($v);
      }
      
      ?>
      }}}
      
      mais aussi :
      
      {{{
      <?php
      
      $s = new IterDATA(
      	array (
      	'source' => 'http://rezo.net/backend/',
      	'sourcemode' => 'rss'
        )
      );
      
      foreach ($s as $k=>$v) {
      	var_dump($v);
      }
      
      ?>
      }}}
      084372dc
  2. déc. 15, 2010
    • cerdic's avatar
      attention : · 403a3446
      cerdic a rédigé
      modificateur['criteres']['statut'] mais modificateur['tout'] (idem pour plat ou lien)
      403a3446
    • cerdic's avatar
    • cerdic's avatar
      Passer la gestion derogatoire du filtrage des boucle par le statut en mode declaratif, · 631075c4
      cerdic a rédigé
       via la globale table_statut :
       
       	$table_statut[nom_table][] = array(
      		'champ'=>'statut',  // champ de la table sur lequel porte le filtrage par le statut
      		'publie'=>'publie', // valeur ou liste de valeurs, qui definissent l'objet comme publie.
      		'previsu'=>'publie,prop', // valeur ou liste de valeurs qui sont visibles en previsu
      		'post_date'=>'date', // un champ de date pour la prise en compte des post_dates, ou rien sinon
      	  'exception'=>'statut', // liste des modificateurs qui annulent le filtrage par statut
      	                         // si plusieurs valeurs : array('statut','tout','lien')
      	);
      
      	Pour 'publier' ou 'previsu', si la chaine commence par un "!" on exclu au lieu de filtrer sur les valeurs donnees
      	si la chaine est vide, on ne garde rien si elle est seulement "!" on n'exclu rien
      
      	Si le statut repose sur une jointure, 'champ' est alors un tableau du format suivant :
      	'champ'=>array(
      	    array(table1, cle1),
      	    ...
      	    array(tablen, clen),
      	    champstatut
      	 )
      
      	champstatut est alors le champ statut sur la 'tablen'
      	dans les jointures, 'clen' peut etre un tableau pour une jointure complexe : array('id_objet','id_article','objet','article')
      		
      On evacue le codes des boucles sur les tables articles, auteurs, et rubriques.
      La table documents est en sursis, son cas est deja regle dans le plugin mediatheque
      631075c4
    • cerdic's avatar
      indentation et commentaire · af12ac2d
      cerdic a rédigé
      af12ac2d
    • Fil's avatar
      87132189
    • Fil's avatar
  3. déc. 14, 2010
  4. déc. 13, 2010
  5. déc. 12, 2010
    • Fil's avatar
    • Fil's avatar
      petits details · 609769c0
      Fil a rédigé
      609769c0
    • Fil's avatar
      · 4cbf2cfb
      Fil a rédigé
      critere {{{ {datasource #ARRAY, table} }}} pour la boucle (DATA).
      Exemple:
      {{{    <BOUCLE_y(DATA){datasource #CONFIG**,table}{valeur>0}{cle==version}> }}}
      4cbf2cfb
    • Fil's avatar
      les boucles ENUM et DATA arrivent : · 02600a4a
      Fil a rédigé
      Boucle POUR:
      ============
      
      <BOUCLE_x(POUR){tableau=#CONFIG**}{valeur>0}{cle==version}>
      
      
      Boucle DATA:
      ============
      
      <BOUCLE_r(DATA){datasource http://localhost/spip/?page=backend, rss}>
      <BOUCLE_r1(DATA){datasource http://localhost/spip/rien.json, json}> <BOUCLE_r2(DATA){datasource http://localhost/spip/rien.yaml, yaml}{pagination 5}>
      <BOUCLE_r3(DATA){datasource TEST.CSV, csv}{valeur==France}>
      
      
      Boucle ENUM:
      ============
      
      [(#REM)
      	Echiquier
      ]<B_z>
      	<table>
      	<BOUCLE_z(ENUM){1,8}>
      	<tr>
      	<BOUCLE_y(ENUM){1,8}>
      		<td>
      		[(#_z:VALEUR|plus{64}|chr)]#VALEUR
      		</td>
      	</BOUCLE_y>
      	</tr>
      	</BOUCLE_z>
      	</table>
      </B_z>
      
      
      [(#REM)
      	Une pagination qui va jusqu'au max possible
      ]<B_a>
      [<p class="pagination">(#PAGINATION)</p>]
      <BOUCLE_a(ENUM){pagination 10}>
      #VALEUR
      </BOUCLE_a>
      
      
      
      
      02600a4a
  6. déc. 11, 2010
  7. déc. 09, 2010
    • cerdic's avatar
      trouve_modele reprend son role initial limite au cas de modeles/ · 20450bf8
      cerdic a rédigé
      et on delegue a trouver_fond la tache de trouver un fond dans le chemin en prenant en compte son extension.
      
      Elle s'enrichit d'un argument optionnel booleen permettant de retourner son resultat sous forme de tableau type pathinfo
      dont la valeur 'extension' est toujours renseignee (meme en cas d'echec), et dont la valeur 'fond' contient le nom du fichier sans l'extension.
       
      Cela permet d'eviter de mettre l'extension en dur dans styliser.
      Les plugins pourront utiliser cette fonction, et continuer a etre compatible avec les anciennes versions de SPIP simplement
      en la definissant si elle n'existe pas
      20450bf8
    • cerdic's avatar
      Report de r16655 · cff230f3
      cerdic a rédigé
      cff230f3
    • cerdic's avatar
      report de r16653 · 18244e32
      cerdic a rédigé
      18244e32
    • cerdic's avatar
      report merge de r16615 · 81e9b407
      cerdic a rédigé
      La constante _EXTENSION_SQUELETTE qui indique l'extension d'un
      sauelette avait beaucoup trop d'occurrences dans le code,
      ce qui ne permet pas facilement de mettre en place une strategie
      ou plusieurs extensions seraient possibles simultanement.
      Il n'y a besoin que d'une seule occurrence en fait,
      dans la fonction {{{trouve_modele}}} sur laquelle toutes les autres se
      rabattent.
      
      Pour le decompilateur, il faut se baseru sur l'extension du
      fichier de depart pour retrouver l'information, et n'avoir
      qu'un seul point d'entree poureviter de gerer une valeur par defaut.
      
      Pour le debusqueur, on donne le nom du squelette sans l'extension
      puisque justement il est possible qu'il y ait le choix.
      81e9b407
    • cerdic's avatar
      report oublie de r15943 · 0cf15c63
      cerdic a rédigé
      0cf15c63
    • cerdic's avatar
  8. déc. 08, 2010
    • cerdic's avatar
      Report de r16647 · e8b7a40c
      cerdic a rédigé
      Le critere age_redac n'etait pas pris en compte pour une base externe (B. Gugger).
      En fait c'est plus general que ca, c'est vrai aussi pour le titre implicite.
      Correctif a tester intensivement
      e8b7a40c
    • cerdic's avatar
      Report de [16596] et [16603] · efc42aaf
      cerdic a rédigé
      efc42aaf
  9. nov. 18, 2010
  10. nov. 16, 2010
  11. nov. 09, 2010
  12. nov. 08, 2010
    • davux's avatar
      Mettre en cache de squelette le test d'HTML5 · d2005e08
      davux a rédigé
      Évaluer html5_permis() une fois pour toutes à la compilation du
      squelette, au lieu de repousser le test au moment de la génération
      des caches de pages.
      d2005e08
  13. oct. 23, 2010
    • cerdic's avatar
      Centralisation du code complexe d'appels de fonctions pour decoder une url. · b8bebc4b
      cerdic a rédigé
      La complexite est liee a la compat ascendante, car les vieilles fonctions manipulaient directement des globales.
      La fonction urls_decoder_url() de inc/urls gere donc tout cela une fois pour toute, en isolant les globales concernees (sauvegarde/restauration)
      ce qui permet de l'utiliser partout sans precaution.
      Un flag $assembler par defaut a false permet de distinguer l'appel principal depuis public/assembler, qui accepter une redirection brutale,
      et necessite de prendre en compte les globales $_SERVER['REDIRECT_url_propre'] et $_ENV['url_propre']
      Celles-ci ne sont plus videes par assembler car elles sont gerees proprement par la fonction urls_decoder_url
      
      Il serait neanmoins plus prudent d'evacuer aussi ces arguments implicites au profit d'arguments explicites, 
      pour plus de clarete du code.
      
      Si les tests sur form_hidden sont exhaustif, on ne casse rien en passant par cette fonction depuis le filtre form_hidden.
      Si des cas de bugs sont remontes, il faudra completer les tests avant de corriger la fonction ou le filtre.
      b8bebc4b
  14. oct. 18, 2010
  15. oct. 15, 2010
  16. oct. 07, 2010
    • cerdic's avatar
      dans une pagination, lorsque la page demandee etait superieure au nombre de... · 09df8495
      cerdic a rédigé
      dans une pagination, lorsque la page demandee etait superieure au nombre de resultats, cela provoquait une boucle vide et des messages saugrenus du genre "Il n'y a aucun ...".
      On borne donc, et dans tous les cas, la boucle affiche ce qui correspond a la derniere page de la pagination.
      Ainsi, si en ajax on retire des elements de la liste paginee, celle-ci revient automatiquement a la page precedente lorsqu'on a vide la deniere page.
      09df8495
Chargement en cours