Meta tag newline
In mijn head-sectie staat een meta beschrijving:
Ik heb een newline toegevoegd zodat de volgende string netjes op een nieuwe regel geplaatst wordt.
Kom dit echter niet vaak tegen, dus ik vraag me af of dit gangbaar is of juist niet?
Guido
Waarom zou je een echo per regel gebruiken?
"Effectieve titels en fragmenten samenstellen voor zoekresultaten"
https://support.google.com/webmasters/answer/35624?hl=nl
En als de description-content het dynamische deel is, echo dan dat deel? Zo houd je ook beter het verschil tussen statisch en dynamisch in stand. Hoef je ook geen escape-sequences toe te voegen voor een simpele regelovergang.
Het is niet gebruikelijk en zinvol om statische html te echo'en. Alles wat je in php doet moet verwerkt worden en kost dus extra tijd. Statische informatie ga je daarom niet echo'en.
Dit zet je dus gewoon buiten je php code. Dan hoef je ook geen newline toe te voegen.
<meta name="description" content="Mijn meta beschrijving">
<volgende regel hier>
Dit is onderdeel van een functie, dus dit staat niet zo in de head sectie. Kan de echo overigens misschien beter door return vervangen in dit geval. Is inderdaad niet een statische meta beschrijving, maar zo even gedaan voor het topic.
Een newline toevoegen is dan prima.
Wist je dat PHP daar ook een eigen constante voor heeft? -> PHP_EOL.
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$meta = '<meta name="description" content="Mijn meta beschrijving">' . PHP_EOL;
$meta .= 'volgende regel hier';
return $meta;
?>
$meta = '<meta name="description" content="Mijn meta beschrijving">' . PHP_EOL;
$meta .= 'volgende regel hier';
return $meta;
?>
Guido - op 13/09/2020 00:32:55:
Dit is onderdeel van een functie, dus dit staat niet zo in de head sectie. Kan de echo overigens misschien beter door return vervangen in dit geval. Is inderdaad niet een statische meta beschrijving, maar zo even gedaan voor het topic.
Dan doet die functie te veel. Single-responsibility principle: a class or module should have one, and only one, reason to be changed.
Straks kom je er bijvoorbeeld achter dat je die description per webpagina op drie plaatsen nodig hebt: niet alleen in een reguliere meta-tag, maar ook in Open Graph en in een rich snippet in JSON. Een functie die de description genereert, zou daarom los moeten staan van de functie(s) die er meta-tags of iets anders van maken.
Omgekeerd zou een andere functie die regeleinden invoegt na meta-tags in de head ook compleet los moeten werken van een functie die een description-tag genereert. Dat is immers functionaliteit die eventueel ook geldt voor andere tags in de head die helemaal niets met een description van doen hebben.
Volgens mij is het ook een goed ontwerpprincipe om functies niet rechtstreeks dingen te laten echo'en (natuurlijk zijn hier ook uitzondering op) maar de inhoud als string te retourneren.
Je krijgt dus bijvoorbeeld zoiets:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
function bakHTML($data) {
ob_start(); // start output buffering
?><div>
<lala><?php echo $data['x']; ?</lala>
<asdf><em>[code]<?php echo $data['y']; ?></em></asdf>
</div><?php
return ob_get_clean(); // vang inhoud op en retourneer als string
}
?>
function bakHTML($data) {
ob_start(); // start output buffering
?><div>
<lala><?php echo $data['x']; ?</lala>
<asdf><em>[code]<?php echo $data['y']; ?></em></asdf>
</div><?php
return ob_get_clean(); // vang inhoud op en retourneer als string
}
?>
Ward van der Put op 13/09/2020 09:09:16:
Dan doet die functie te veel. Single-responsibility principle: a class or module should have one, and only one, reason to be changed.
Veel frameworks houden zich wat dat betreft niet exact aan de 'regels'. Theoretisch klopt je opmerking. De praktijk is vaak anders. Wat je klopt zegt, maar een functie om meta op te bouwen is ook weer niet heel vreemd of ongebruikelijk.
Ik heb een functie waarin ik de (niet statische) meta beschrijving genereer en die functie wordt uitgevoerd in de head sectie van de site. Hiervoor haak ik in op de wp_head() functie van WordPress:
https://developer.wordpress.org/reference/functions/wp_head/
Overigens, wanneer ik binnen mijn functie return ipv echo, wordt er geen meta beschrijving geplaatst. Vandaar dat ik toen blijkbaar voor echo gekozen heb.
Nogmaals bedankt allemaal, ik weet weer een stuk meer..
Guido
Guido - op 14/09/2020 00:03:12:
Overigens, wanneer ik binnen mijn functie return ipv echo, wordt er geen meta beschrijving geplaatst.
Dat is niet geheel verwonderlijk. De functie returnt alleen gegevens en er wordt niks ge-echoot/getoond.
Dus stel de naam van de functie is getHead() of iets dergelijks, dan deed je voorheen:
In plaats daarvan doe je nu: