Hoe variabelnamen uit database toewijzen
Pagina: « vorige 1 2 3 4 volgende »
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$strings = [
'home' => array (
'title' => 'Onze website',
'content' => 'Welkom op onze site. Hier kan je informatie vinden over.....'
),
'contact' => array (
'title' => 'Contactgegevens',
'content' => 'Je kan ons bereiken via bla bla'
),
'over_ons' => array (
'title' => 'Over ons',
'content' => 'Wij zijn bla die bla....'
),
];
// laat array zien
echo "<pre>".print_r($strings)."</pre>";
// gebruik als volgt:
echo $strings['over_ons']['title']; // toont Over ons
?>
$strings = [
'home' => array (
'title' => 'Onze website',
'content' => 'Welkom op onze site. Hier kan je informatie vinden over.....'
),
'contact' => array (
'title' => 'Contactgegevens',
'content' => 'Je kan ons bereiken via bla bla'
),
'over_ons' => array (
'title' => 'Over ons',
'content' => 'Wij zijn bla die bla....'
),
];
// laat array zien
echo "<pre>".print_r($strings)."</pre>";
// gebruik als volgt:
echo $strings['over_ons']['title']; // toont Over ons
?>
Op dit punt heb je een mooie multidimensionale array. Je kan zelf nog per pagina een extra 'tekstblok' aanmaken.
Nadeel: Onderhoud. Hoe wil je op locatie je tekst aanpassen?
Op dit punt zijn databases juist handiger.
Gewijzigd op 31/08/2023 22:37:42 door - Ariën -
he ivo. bedankt voor je input. stel ik op prijs. $1etitel gebruik ik ook niet. wel $rij1titel1. Placeholders eigenlijk nooit gebruikt. maar wel een idee wellicht. en inderdaad maak ik wellicht teveel zorgen dat een gebruiker de pagina kan aanpassen via inspect. zal ook eens kijken naar smarty.
Zeg op zijn minst wat het is, en waar de titel bij hoort.
Zie dus mijn geschreven multidimensionale array. het is geen database, maar wel een mooie genormaliseerde structuur.
Ter informatie: Ik gebruik zelf ook Smarty, alhoewel ik denk ik tegenwoordig naar Twig had gekeken omdat die slimmer is. Mijn CMS gebruikt Smarty voor templates met placeholders zoals {$sitename}.
Met dit zorg ervoor dat de placeholder gevuld wordt.
$smarty->assign('sitename', 'Mijn site');
Je kan ook hele array's gebruiken in een assign() en placeholder. Ikzelf heb een array met configuratie en enkele strings in de database opgeslagen die ik met {$config.template.about_us} kan oproepen. Maar je kan dit net zo goed uit een vaste hardcoded array halen.
Gewijzigd op 31/08/2023 22:45:41 door - Ariën -
he arien. jij ook bedankt voor je reactie. Ik denk dat ik nu genoeg heb om verder mee te gaan. iedereen nogmaals super bedankt.
Succes! :-)
Ivo P op 31/08/2023 22:26:57:
Ik zou in plaats van
meer zien in
Maar bovenstaande code wordt dan toch alleen {rijtitel1} weergegeven. waar verwijst dit dan naar? Placeholders ken ik alleen van forms waarbij inputvelden alvast gevuld worden. of textarea waarbij tekst verschijnt die je al gedefinieerd hebt verschijnt en die je kunt wijzigen. Bovendien moet ik het ook nog eens kunnen opslaan in de database. wellicht zie ik de connectie niet. Maar zal er nog eens naar kijken.
Dan zijn het geen variabelen, maar placeholders.
En dan zou je ook eens kunnen kijken hoe bijvoorbeeld Smarty werkt met het vullen van de inhoud in een template.
Je beperkt je nu ook in de naamgeving van de variabelen. $1eTitel is bijvoorbeeld niet toegestaan.
terwijl je met str_replace() geen beperking hebt in de te vervangen placeholders.
Toevoeging op 31/08/2023 22:30:05:
Verder ben je volgens mij de enige die zich zorgen maakt over het aanpassen van de pagina middels Inspect.
Er zit nog een knop in je browser die zorgt dat de pagina geheel verdwijnt namelijk.
(er staat een X op en staat helemaal rechtsbovenaan)
Daarnaast kunnen gebruikers ook met Zoom de site heel anders uit laten zien, mogelijk omdat ze slechte ogen hebben.
Of met leuke plugins kun je kleuren en layout aanpassen, omdat je dat beter kunt lezen.
Dat doet niets af aan hoe je pagina er voor elke standaard gebruiker uit gaat zien.
meer zien in
Maar bovenstaande code wordt dan toch alleen {rijtitel1} weergegeven. waar verwijst dit dan naar? Placeholders ken ik alleen van forms waarbij inputvelden alvast gevuld worden. of textarea waarbij tekst verschijnt die je al gedefinieerd hebt verschijnt en die je kunt wijzigen. Bovendien moet ik het ook nog eens kunnen opslaan in de database. wellicht zie ik de connectie niet. Maar zal er nog eens naar kijken.
Dan zijn het geen variabelen, maar placeholders.
En dan zou je ook eens kunnen kijken hoe bijvoorbeeld Smarty werkt met het vullen van de inhoud in een template.
Je beperkt je nu ook in de naamgeving van de variabelen. $1eTitel is bijvoorbeeld niet toegestaan.
terwijl je met str_replace() geen beperking hebt in de te vervangen placeholders.
Toevoeging op 31/08/2023 22:30:05:
Verder ben je volgens mij de enige die zich zorgen maakt over het aanpassen van de pagina middels Inspect.
Er zit nog een knop in je browser die zorgt dat de pagina geheel verdwijnt namelijk.
(er staat een X op en staat helemaal rechtsbovenaan)
Daarnaast kunnen gebruikers ook met Zoom de site heel anders uit laten zien, mogelijk omdat ze slechte ogen hebben.
Of met leuke plugins kun je kleuren en layout aanpassen, omdat je dat beter kunt lezen.
Dat doet niets af aan hoe je pagina er voor elke standaard gebruiker uit gaat zien.
Er mist een reactie op je quote?
Quote:
Maar bovenstaande code wordt dan toch alleen {rijtitel1} weergegeven
file1.template:
Datebase tabel
script.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$sql = "SELECT placeholder, inhoud FROM tabel WHERE pagina = 123;";
$inhoud = file_get_content('file1.template');
while ($row = mysqli_fetch_assoc($result)) {
$inhoud = str_replace('{' . $row['placeholder'] . '}', htmlspecialchars($row['tekst]), $inhoud);
}
echo $inhoud;
?>
$sql = "SELECT placeholder, inhoud FROM tabel WHERE pagina = 123;";
$inhoud = file_get_content('file1.template');
while ($row = mysqli_fetch_assoc($result)) {
$inhoud = str_replace('{' . $row['placeholder'] . '}', htmlspecialchars($row['tekst]), $inhoud);
}
echo $inhoud;
?>
Met Smarty heb je nog meer logica erin zitten die je ook in PHP gebruikt. Zoals if-elseif-else statements, modifiers om text aan te passen met bijv. strtoupper() en nog veel meer.
Dus als je HTML en PHP gescheiden wilt hebben, dan is een templateparser de optie. Je kan dit ook prima inzetten voor een algemeen CMS die je ook inzet voor andere klanten.
thx.
Toevoeging op 01/09/2023 11:42:17:
Ivo P op 01/09/2023 09:14:59:
file1.template:
Datebase tabel
script.php
Quote:
Maar bovenstaande code wordt dan toch alleen {rijtitel1} weergegeven
file1.template:
Datebase tabel
script.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$sql = "SELECT placeholder, inhoud FROM tabel WHERE pagina = 123;";
$inhoud = file_get_content('file1.template');
while ($row = mysqli_fetch_assoc($result)) {
$inhoud = str_replace('{' . $row['placeholder'] . '}', htmlspecialchars($row['tekst]), $inhoud);
}
echo $inhoud;
?>
$sql = "SELECT placeholder, inhoud FROM tabel WHERE pagina = 123;";
$inhoud = file_get_content('file1.template');
while ($row = mysqli_fetch_assoc($result)) {
$inhoud = str_replace('{' . $row['placeholder'] . '}', htmlspecialchars($row['tekst]), $inhoud);
}
echo $inhoud;
?>
dank je wel. er zit echter ergens een fout in de onderstaande syntax. Kan 'm alleen niet vinden. heb er al naar gekeken.
Gewijzigd op 01/09/2023 11:48:46 door - Ariën -
Als ik het goed begrijp moet dus nu in de content uit file1.template de overeenstemmende placeholder vervangen worden door "dit is de titel". Maar dat gebeurd momenteel nog niet.
Gewijzigd op 01/09/2023 12:17:18 door Paul Weiss
Klopt, dat moet inhoud zijn.
Wat doe ik fout?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$inhoud = file_get_contents("file1.txt");
echo $inhoud;
$sql = "SELECT placeholder, inhoud FROM tabel WHERE pagina = 2";
$result = $conn->query($sql);
while ($row = mysqli_fetch_assoc($result)) {
$inhoud = str_replace('{' . $row['placeholder'] . '}', htmlspecialchars($row['inhoud']), $inhoud);
}
echo $inhoud;
?>
$inhoud = file_get_contents("file1.txt");
echo $inhoud;
$sql = "SELECT placeholder, inhoud FROM tabel WHERE pagina = 2";
$result = $conn->query($sql);
while ($row = mysqli_fetch_assoc($result)) {
$inhoud = str_replace('{' . $row['placeholder'] . '}', htmlspecialchars($row['inhoud']), $inhoud);
}
echo $inhoud;
?>
Gewijzigd op 01/09/2023 12:32:48 door Paul Weiss
Kijk eens met print_r($row); in je while-loop of die data beschikbaar is in je database.
Meten en dus debuggen is weten... ;-)
Gewijzigd op 01/09/2023 12:54:23 door - Ariën -
Zowel placeholder als ook de inhoud van pagina 2 werden weergegeven.
Wat staat er in je database?
Zit dan een foutje in de str_replace denk ik. Maar ik zie het niet.
In mijn tabel staat precies dat wat ivo heeft aangegeven. Heb alleen 1 extra kolom met de naam pagina.
zie hieronder:
Code (php)
1
2
3
2
3
id placeholder inhoud Pagina
1 inhoud_a hier een lap tekst 1
2 rij1titel1 Dit is de titel
1 inhoud_a hier een lap tekst 1
2 rij1titel1 Dit is de titel
{/code]
Toevoeging op 01/09/2023 13:48:37:
Hier even een update. werkt nu wel. Deze werkwijze is inderdaad beter. Maar nu rijst de vraag als ik het tekstblok wijzig hoe kan ik de inhoud dan weer opslaan in de database. Met php variable wist ik het wel.
de namen van de placeholders kunnen namelijk steeds varieeren bijv.
Gewijzigd op 01/09/2023 13:52:26 door - SanThe -
Gewijzigd op 01/09/2023 14:01:40 door Paul Weiss