Codage/programmation

Tableaux responsives

= tableaux qui s'adaptent à la taille du support. Ce soir, le support sera le smartphone. Par défaut, mon thème WordPress, comme beaucoup d'autre, ne traite pas la responsivité des tableaux:

Defaut: pas responsive

Colonne 1 Colonne 2 Colonne 3 Colonne 4 Colonne 5 Colonne 6
Ligne 1 c2l1 texte 1 c3l1 texte 2 c4l1 texte 3 c5l1 texte 4 c6l1 texte 5
Ligne 2 c2l2 texte 1 c3l2 texte 2 c4l2 texte 3 c5l2 texte 4 c6l2 texte 5
Ligne 3 c2l3 texte 1 c3l3 texte 2 c4l3 texte 3 c5l3 texte 4 c6l3 texte 5
Ligne 4 c2l4 texte 1 c3l4 texte 2 c4l4 texte 3 c5l4 texte 4 c5l4 texte 5
Ce qui donne sur un smartphone, un tableau "mangé" sur la droite (il manque un bout de la colonne 5 + la colonne 6)*: Il existe plusieurs manière d'adapter les tableaux aux smartphone; en voici 2 qui ont retenu mon attention:

1/ La plus simple: ajouter class="responsive" au tableau

@media only screen and (max-width: 840px) {
table.responsive {
margin-bottom: 0;
overflow: hidden;
overflow-x: scroll;
display: block;
white-space: nowrap;
}
}
Colonne 1 Colonne 2 Colonne 3 Colonne 4 Colonne 5 Colonne 6
Ligne 1 c2l1 texte 1 c3l1 texte 2 c4l1 texte 3 c5l1 texte 4 c6l1 texte 5
Ligne 2 c2l2 texte 1 c3l2 texte 2 c4l2 texte 3 c5l2 texte 4 c6l2 texte 5
Ligne 3 c2l3 texte 1 c3l3 texte 2 c4l3 texte 3 c5l3 texte 4 c6l3 texte 5
Ligne 4 c2l4 texte 1 c3l4 texte 2 c4l4 texte 3 c5l4 texte 4 c5l4 texte 5
Le résultat donne un tableau affublé d'une scrollbar horizontale*:

2/ Plus compliqué: ajouter class="responsive-table-line" au tableau + data-title="nomdelacolonne" aux <td>

	
	@media (max-width: 500px) {
	
	.responsive-table-line td:before { content: attr(data-title); }
	
	.responsive-table-line table, 
	.responsive-table-line thead, 
	.responsive-table-line tbody, 
	.responsive-table-line th, 
	.responsive-table-line td, 
	.responsive-table-line tr { 
	display: block; 
	}
	 
	.responsive-table-line thead tr { 
	display:none;
	}
	
	.responsive-table-line td { 
	position: relative;
	border: 0px solid transparent;
	padding-left: 50% !important; 
	white-space: normal;
	text-align:right; 
	}
	 
	.responsive-table-line td:before { 
	position: absolute;
	top: 0px;
	left: 0px;
	width: 45%; 
	padding-right: 15px; 
	height:100%;
	white-space: nowrap;
	text-overflow: ellipsis !important;
	overflow:hidden !important;
	text-align:left;
	background-color:#f8f8f8;
	padding:2px;
	}
	
	}
+ dans chaque ligne du tableau:
<tr>
<td data-title="Colonne 1">Ligne 1</td>
<td data-title="Colonne 2">c2l1 texte 1</td>
<td data-title="Colonne 3">c3l1 texte 2</td>
<td data-title="Colonne 4">c4l1 texte 3</td>
<td data-title="Colonne 5">c5l1 texte 3</td>
<td data-title="Colonne 6">c6l1 texte 3</td>
</tr>
Colonne 1 Colonne 2 Colonne 3 Colonne 4 Colonne 5 Colonne 6
Ligne 1 c2l1 texte 1 c3l1 texte 2 c4l1 texte 3 c5l1 texte 3 c6l1 texte 3
Ligne 2 c2l2 texte 1 c3l2 texte 2 c4l2 texte 3 c5l2 texte 3 c6l2 texte 3
Ligne 3 c2l3 texte 1 c3l3 texte 2 c4l3 texte 3 c5l3 texte 3 c6l3 texte 3
Ligne 4 c2l4 texte 1 c3l4 texte 2 c4l4 texte 3 c5l4 texte 3 c6l4 texte 3
Le résultat est étonnant *: *Tous les résultats peuvent être vus dynamiquement à partir d'un smartphone ou en réduisant à la taille d'un smartphone la fenêtre du navigateur si l'écran est grand.

Quand ton client veut un WordPress sur un serveur Window…

Tu n’es pas à l’abri d’un:

 Warning: Cannot modify header information - headers already sent by (output started at ...) in ...\pluggable.php on line 1210

Pour corriger contourner ça:

https://stackoverflow.com/questions/7381661/cannot-modify-header-information-headers-already-sent-by-wordpress-issue

our theme is printing output (text) to the browser, but then for some reason WordPress is redirecting the user (with wp_redirect) away from that page before the whole page is rendered. You can’t start printing output and then redirect, or you’ll get the error you see. That’s what Paul Grime was getting at in his comment.
Ken White commented with a reference to a post with a similar problem. I’ve fixed this in my own experience by buffering the output of the script.
In your theme’s functions.php file (which gets included every time your theme’s pages load), put the following:

//allow redirection, even if my theme starts to send output to the browser
 add_action('init', 'do_output_buffer');
 function do_output_buffer() {
 ob_start();
 }

Now, even if part of your theme starts to send input to the browser, PHP won’t send that text until the page is fully loaded, which allows WordPress to redirect users, if necessary, as part of its own logic.

=> Mon function.php

 

WordPress : une icône par catégorie. Explications.

Rappel: nos articles sont rangés dans des catégories différentes; on souhaite associer à  chacune des catégories de haut niveau une icône; chacune des catégories enfant aura la même icône.

1ère étape: modifier le fichier category.php (dans un thème enfant, ça va de soit)

Pour cela, on va remplacer le code qui fabrique le titre par un code qui, en plus de fabriquer le titre, fabrique une class css particulière (unique serait mieux évidemment) en fonction de chaque catégorie.

Ci-dessous, les copies d’écran des codes:

On remplace ça (attention: Mon thème de base est twentyfourteen):

Par ça (à lire attentivement, il y a des commentaires):

Pour vous éviter de recopier:

<?php $parentscategoryclass ="";
 foreach((get_the_category()) as $category) {
 if ($category->category_parent == 0) {
 $parentscategoryclass = $category->name ;
 //je concatène la première et secondes lettres de chacun des mots composants les catégories (=> art musical => armu)
 $parentscategoryclass = implode('', array_map(function($p) { return mb_strtolower($p[0]).mb_strtolower($p[1]); }, explode(' ', $parentscategoryclass)));
 //je remplace les caractères non alphabétiques par rien (par ex. le "&" de Détours & des tours)
 $parentscategoryclass = preg_replace('#[^[:alpha:]]#', '', $parentscategoryclass);
 }
 }
 // je réécris le titre de la page avec une classe css qui s'appelle facat + les lettres précédentes
 echo '<h1 class="archive-title facat' .$parentscategoryclass.'">';printf( __( '%s', 'twentyfourteen' ), single_cat_title( '', false ) );echo '</h1>';
 ?>

Étape 2: s’assurer de pouvoir utiliser http://fontawesome.io/icons/  sur son WordPress

Fontawesome, c’est un site qui propose une grande liste d’icônes atteignables via css:

Il faut, pour pouvoir l’utiliser, que  WordPress puisse “reconnaître le langage” de fontawesome, c’est-à-dire que le WordPress appelle le fichier css de fontawesome.

Regarde dans ton code source si tu vois un appel vers un fichier css qui mentionne fontawesome.

Sur Lpp le fichier viens du plugin magee shortcode:

Mais plusieurs autres plugins peuvent faire l’affaire:

Et puis, si tu t’y connais en programmation et en WordPress, tu peux tout aussi bien faire appel à se fichier toi-même: http://fontawesome.io/get-started/

Étape 3: s’assurer de pouvoir ajouter du code CSS sur son WordPress:

Personnellement, j’ai opter pour le plugin WP Add Custom CSS:

Mais il en existe des dizaines, sans compter les thèmes qui inclus ce genre de fonctionnalité.

Étape 4: Choisir ses icônes

Tu retournes sur http://fontawesome.io/icons/.

Le choix est impressionnant. Tu y passes le temps que tu veux .

La seule chose que je te demande, c’est de te noter les codes unicode de chacune des icônes (en jaunes ci-dessous):

 Étape 5 écrire le bon CSS:

Exemple pour la catégorie Arts Musicaux: ma classe s’appelle facatarmu (facat+ar+mu => cf le code php dans la page category.php)).

Donc pour la balise <h1> (titre) qui a la class facatarmu, j’applique le code unicode f001 avant (before) le texte:

h1.facatarmu:before {
 content: "\f001";
 font-family: FontAwesome;
 margin-right: 10px;
}

Et le tour est joué: