Résoudre l’erreur « A template that extends another one cannot have a body » avec TWIG

Je travaille sur la conception d’un site Web à titre personnel, basé sur le framework Symphony. Mes connaissances en PHP restent pour le moment assez scolaires et je débute avec ce framework que je trouve très intéressant. Conjointement à Symphony j’utilise son moteur de template par défaut : Twig.

J’ai été confronté à l’erreur suivante :

A template that extends another one cannot have a body

Je disposais d’un template parent et d’un template fils qui étend ce template. A première vue, aucune erreur de visible sauf que l’en fouillant un peu… Le template fils commençait par un commentaire HTML <!– –> !

A savoir qu’un template étendu ne doit pas avoir de code HTML (body) en dehors d’un bloc {% bloc XXXX %} surchargé.

Maintenant je sais 😉

Lister le contenu d’un répertoire en PHP

Il peut parfois être intéressant de lister le contenu d’un répertoire en PHP. Cette fonctionnalité, proposée par défaut pas Apache 2, n’est pas toujours présente sur les serveurs HTTP alternatifs tel que nginx.

 

<?php
function ScanDirectory($Directory){

  $MyDirectory = opendir($Directory) or die('Erreur');
	while($Entry = @readdir($MyDirectory)) {
		if(is_dir($Directory.'/'.$Entry)&& $Entry != '.' && $Entry != '..') {
                         echo '<ul>'.$Directory;
			ScanDirectory($Directory.'/'.$Entry);
                        echo '</ul>';
		}
		else if($Entry != '.' && $Entry != '..' && $Entry != 'index.php') {
			echo '<li><a href='.$Entry.' />'.$Entry.'</li>';

                }
	}
  closedir($MyDirectory);
}

ScanDirectory('.');
?>

 

Customiser le pied de page d’un blog WordPress

Édition 27/09/2015 : Avant de se consacrer à cet article il est judicieux de créer un thème enfant. Je vous invite à lire la documentation et ce tutoriel. Personnellement, je préfère utiliser la ligne de commande comme expliqué dans le tutoriel, ceci évite de se poser trop de question et les erreurs.

Voici la procédure à suivre pour customiser le pied de page de votre blog WordPress.

Le pied de page de votre blog se trouve dans le fichier ‘footer.php’ de votre thème. Par exemple avec le thème $wordpress_dir/wp-content/themes/twentyfifteen/footer.php (ou $wordpress est le répertoire racine de votre site).

Voici le contenu par défaut ce fichier :

<?php
/**
 * The template for displaying the footer
 *
 * Contains the closing of the "site-content" div and all content after.
 *
 * @package WordPress
 * @subpackage Twenty_Fifteen
 * @since Twenty Fifteen 1.0
 */
?>

	</div><!-- .site-content -->

	<footer id="colophon" class="site-footer" role="contentinfo">
		<div class="site-info">
			<?php
				/**
				 * Fires before the Twenty Fifteen footer text for footer customization.
				 *
				 * @since Twenty Fifteen 1.0
				 */
				do_action( 'twentyfifteen_credits' );
				
			?>
			<a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentyfifteen' ) ); ?>"><?php printf( __( 'Proudly powered by %s', 'twentyfifteen' ), 'WordPress' ); ?></a>
		</div><!-- .site-info -->
	</footer><!-- .site-footer -->

</div><!-- .site -->

<?php wp_footer(); ?>

</body>
</html>

 

J’ai choisi d’y insérer le contenu de la page ‘A Propos’ du site.  Pour la récupérer j’utilise le code suivant :

$id=42;
$post = get_post($id);
$title = apply_filters('the_title', $post->post_title);
echo $title;
$content = apply_filters('the_content', $post->post_content);
echo $content;

Et ainsi j’obtiens :

<?php
/**
 * The template for displaying the footer
 *
 * Contains the closing of the "site-content" div and all content after.
 *
 * @package WordPress
 * @subpackage Twenty_Fifteen
 * @since Twenty Fifteen 1.0
 */
?>

	</div><!-- .site-content -->

	<footer id="colophon" class="site-footer" role="contentinfo">
		<div class="site-info">
			<?php
				/**
				 * Fires before the Twenty Fifteen footer text for footer customization.
				 *
				 * @since Twenty Fifteen 1.0
				 */
				do_action( 'twentyfifteen_credits' );
				
				
				$id=42;
				$post = get_post($id);
				$title = apply_filters('the_title', $post->post_title);
				//echo $title;
				$content = apply_filters('the_content', $post->post_content);
				echo $content;
				echo '<p>© TheG - 2014-2015</p>';
			?>
			<a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentyfifteen' ) ); ?>"><?php printf( __( 'Proudly powered by %s', 'twentyfifteen' ), 'WordPress' ); ?></a>
		</div><!-- .site-info -->
	</footer><!-- .site-footer -->

</div><!-- .site -->

<?php wp_footer(); ?>

</body>
</html>