Différences entre les pages « EasyNote SL65-U-020FR » et « Plugin SPIP »

De Cliss XXI
(Différence entre les pages)
Sauter à la navigation Sauter à la recherche
imported>SylvainBeucler
m
 
imported>SylvainBeucler
 
Ligne 1 : Ligne 1 :
Modèle "EasyNote SL65-U-020FR"
+
= Introduction =
  
 +
* [http://www.spip.net/rubrique205.html Le développement de SPIP et ses outils]: documentation officielle
 +
* [http://doc.spip.org/@Les-points-d-entree-pipelines Les points d’entrée (pipelines)]: les ''hooks'', quoi
 +
* Formulaires:
 +
** [http://www.spip.net/fr_article3796.html Formulaires CVT par l’exemple]
 +
** [http://www.spip.net/fr_article3800.html Les formulaires CVT de SPIP 2.0]
 +
* Le "SPIP_PATH", pour chercher les squelettes, dans l'ordre: <code>squelettes, (racine), squelettes-dist, prive, ecrire</code> (cf. <code>ecrire/inc/utils.php:_chemin()</code>)
 +
 +
= API =
 +
 +
http://doc.spip.org/ a pour but de documentation l'API de SPIP, une page par fonction, modifiable par tous.
 +
En pratique, peu de fonctions sont documentées. Qui plus est, cette documentation étant sensées être la documentation officielle, le code source se contente d'y faire référence, sans détailler ces fonctions - donc il n'y a pas plus d'informations dans les fichiers .php de <code>ecrire/</code>.
 +
 +
La meilleure source de documentation reste la lecture directe du code source, et l'étude d'autres plugins.
 +
 +
= Passer de 1.9 à 2.0 =
 +
 +
Certaines fonctions ont changé. Pour convertir le code de votre plugin, une bonne source d'information est <code>ecrire/inc/vieilles_defs.php</code> qui définit des anciennes fonctions avec la nouvelle API 2.0.
 +
 +
= Insérer une nouvelle page admin =
 +
 +
* Définir le préfixe de votre plugin (convention de nommage) dans <code>plugin.xml</code>:
 +
<prefix>monprefixe</prefix>
 +
* Créer <code>plugins/mon_plugin-0.1/exec/monprefixe_mapage.php</code>
 +
* Y définir <code>exec_monprefixe_mapage()</code> (ou <code>exec_monprefixe_mapage_dist()</code>)
 +
 +
Contenu du fichier:
 
<pre>
 
<pre>
# lspci
+
<?php
00:00.0 Host bridge: Intel Corporation Mobile 4 Series Chipset Memory Controller Hub (rev 07)
+
if (!defined("_ECRIRE_INC_VERSION")) return;
00:01.0 PCI bridge: Intel Corporation Mobile 4 Series Chipset PCI Express Graphics Port (rev 07)
+
 
00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 03)
+
function exec_monprefixe_index()
00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 03)
+
{
00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 03)
+
  $commencer_page = charger_fonction('commencer_page', 'inc');
00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 03)
+
  echo $commencer_page("Titre (barre de titre du navigateur)");
00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 03)
+
 
00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 03)
+
  echo gros_titre("Titre (dans la page)", '<img src="logo.png" alt="" />', false);
00:1c.3 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 4 (rev 03)
+
 
00:1c.5 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 6 (rev 03)
+
 
00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03)
+
  echo debut_grand_cadre(true);
00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03)
+
  echo "Bandeau en haut";
00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03)
+
  echo fin_grand_cadre(true);
00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03)
+
 
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 93)
+
 
00:1f.0 ISA bridge: Intel Corporation ICH9M LPC Interface Controller (rev 03)
+
  echo debut_gauche("ignored", true);
00:1f.2 SATA controller: Intel Corporation ICH9M/M-E SATA AHCI Controller (rev 03)
+
  echo "À gauche<br />";
00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 03)
+
 
01:00.0 VGA compatible controller: ATI Technologies Inc Device 95c2
+
  echo creer_colonne_droite("", true);
01:00.1 Audio device: ATI Technologies Inc RV620 Audio device [Radeon HD 34xx Series]
+
  echo "À droite si grand écran, à gauche sinon<br />";
08:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express Fast Ethernet controller (rev 02)
+
  echo debut_boite_info(true);
0a:01.0 FireWire (IEEE 1394): O2 Micro, Inc. Firewire (IEEE 1394) (rev 02)
+
  echo "Encadré";
0a:01.2 SD Host controller: O2 Micro, Inc. Integrated MMC/SD Controller (rev 02)
+
  echo fin_boite_info(true);
0a:01.3 Mass storage controller: O2 Micro, Inc. Integrated MS/xD Controller (rev 01)
 
</pre>
 
  
* xorg.conf: forcer le pilote "radeon" (pas "radeonhd"):
+
  $res = icone_horizontale("Page 1", generer_url_ecrire("monprefixe_page1"),
<pre>
+
  "../"._DIR_PLUGIN_MONPREFIXE."fond.gif",
Section "Device"
+
  "../"._DIR_PLUGIN_MONPREFIXE."page1.gif", false);
        Identifier      "Configured Video Device"
+
  echo bloc_des_raccourcis($res); // crée creer_colonne_droite si besoin
        Driver "radeon"
 
EndSection
 
</pre>
 
  
* Si l'écran est "flou" au démarrage, passer en mode texte (Ctrl+Alt+F1) puis de nouveau en mode graphique (Ctrl+Alt+F7)
 
* Pas encore d'accélération 3D (pilote R600/R620).
 
* Configuration:
 
** Radeon HD 34xx Series
 
** xserver-xorg 1:7.3+18
 
** xserver-xorg-video-radeon 1:6.9.0-1+lenny4
 
** <code>Setting screen physical size to 367 x 229</code>
 
** <code>Modeline "1440x900"x0.0    96.30  1440 1648 1680 1760  900 903 909 912 -hsync -vsync (54.7 kHz)</code>
 
  
* Mise en veille secteur: http://en.opensuse.org/S2ram
+
  echo debut_droite("ignored", true); // ferme creer_colonne_droite, si utilisé
** La technique de mettre des paramètres S2RAM_OPTS dans /etc/pm/config.d/ ne fonctionne pas (essai avec <code>defaults</code>, <code>config</code> et <code>modules</code>)
+
  echo "Contenu, au milieu";
** <code>s2ram -f -a 3</code>: OK texte + graphique
 
** Mise en veille prolongée: OK
 
  
* Webcam OK
 
  
* Son:
+
  echo fin_gauche();
** Mettre à jour alsa:
+
  echo fin_page();
apt-get install -t experimental alsa-base  # nécessaire?
+
}
apt-get install alsa-source  # avec les dépendances stable
 
apt-get install -t experimental alsa-source  # mettre à jour en 1.0.18a
 
cd /usr/src
 
m-a a-i alsa-source  # c'est un peu long
 
** Ajouter dans /etc/modprobe.d/alsa-base:
 
<pre>
 
options snd-hda-intel model=g71v
 
options snd-hda-intel enable_msi=1
 
 
</pre>
 
</pre>
** Recharger alsa
 
alsa force-reload
 
  
Voir aussi http://doc.ubuntu-fr.org/audio_intel_hda#notes
+
Les <code>true</code> et <code>false</code> qui se baladent partout permettent de dire qu'on s'occupe d'afficher le contenu, sans quoi SPIP affiche un avertissement. Il faut utiliser <code>true</code> ou <code>false</code> au cas par cas, selon la fonction, cela manque de cohérence.
 +
 
 +
Pour le contenu, on peut soit l'écrire avec des <code>echo</code>, soit faire appel à un squelette dans <code>plugins/mon_plugin-0.1/prive/mon_squelette.html</code>:
 +
recuperer_fond('prive/mon_squelette', $_GET);

Version du 14 avril 2009 à 11:56

Introduction

API

http://doc.spip.org/ a pour but de documentation l'API de SPIP, une page par fonction, modifiable par tous. En pratique, peu de fonctions sont documentées. Qui plus est, cette documentation étant sensées être la documentation officielle, le code source se contente d'y faire référence, sans détailler ces fonctions - donc il n'y a pas plus d'informations dans les fichiers .php de ecrire/.

La meilleure source de documentation reste la lecture directe du code source, et l'étude d'autres plugins.

Passer de 1.9 à 2.0

Certaines fonctions ont changé. Pour convertir le code de votre plugin, une bonne source d'information est ecrire/inc/vieilles_defs.php qui définit des anciennes fonctions avec la nouvelle API 2.0.

Insérer une nouvelle page admin

  • Définir le préfixe de votre plugin (convention de nommage) dans plugin.xml:
<prefix>monprefixe</prefix>
  • Créer plugins/mon_plugin-0.1/exec/monprefixe_mapage.php
  • Y définir exec_monprefixe_mapage() (ou exec_monprefixe_mapage_dist())

Contenu du fichier:

<?php
if (!defined("_ECRIRE_INC_VERSION")) return;

function exec_monprefixe_index()
{
  $commencer_page = charger_fonction('commencer_page', 'inc');
  echo $commencer_page("Titre (barre de titre du navigateur)");

  echo gros_titre("Titre (dans la page)", '<img src="logo.png" alt="" />', false);


  echo debut_grand_cadre(true);
  echo "Bandeau en haut";
  echo fin_grand_cadre(true);


  echo debut_gauche("ignored", true);
  echo "À gauche<br />";

  echo creer_colonne_droite("", true);
  echo "À droite si grand écran, à gauche sinon<br />";
  echo debut_boite_info(true);
  echo "Encadré";
  echo fin_boite_info(true);

  $res = icone_horizontale("Page 1", generer_url_ecrire("monprefixe_page1"),
			   "../"._DIR_PLUGIN_MONPREFIXE."fond.gif",
			   "../"._DIR_PLUGIN_MONPREFIXE."page1.gif", false);
  echo bloc_des_raccourcis($res); // crée creer_colonne_droite si besoin


  echo debut_droite("ignored", true); // ferme creer_colonne_droite, si utilisé
  echo "Contenu, au milieu";


  echo fin_gauche();
  echo fin_page();
}

Les true et false qui se baladent partout permettent de dire qu'on s'occupe d'afficher le contenu, sans quoi SPIP affiche un avertissement. Il faut utiliser true ou false au cas par cas, selon la fonction, cela manque de cohérence.

Pour le contenu, on peut soit l'écrire avec des echo, soit faire appel à un squelette dans plugins/mon_plugin-0.1/prive/mon_squelette.html:

recuperer_fond('prive/mon_squelette', $_GET);