Stel ik heb in mijn database 2 veldnamen en wel content1 en content2. Content1 bavat alle namen van variabelen die doormiddel van een php script zijn aangemaakt. De namen van deze variabelen worden ook in een php document gebruikt om de inhoud daarvan weer te geven (zie verder onderaan). De inhoud van content1 zijn elk uniek en worden door een php script dus gegenereerd. veldnaam "content2". bevat de inhoud die aan deze variable is/wordt toegekend.

Hieronder een voorbeeld hoe het eruit zou kunnen zien:

Content1 bevat bijvoorbeeld de volgende variablenamen:

rij1titel1
rij1titel2
rij90tekst1
rij90tekst2

De repec. waardes in content2 bevatten bijvoorbeeld

hallo iedereen
Welkom iedereen
Dit huis is blauw
Deze tandenborstel is rood

dus rij1titel1 = hallo iedereen
etc..


zie de onderstaande code die ik momenteel heb. Hierdoor wordt alles uit de database dus ingelezen. Maar hoe kan ik nu ervoor zorgen dat de variabelen namen uit de database worden toegewezen en vervolgens kunnen worden weergegeven? beetje verwarrend wellicht wat ik bedoel. Hoop dat het een beetje duidelijk is wat ik wil. Weet ook niet of dit uberhaupt mogelijk is!!

Via onderstaande script wordt alles dus ingelezen


<?php

$servername = "xxxxx";
$username = "xxxx";
$password = "xxxx";
$dbname = "xxxxx";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, content1, content2 FROM content2";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
  // output data of each row
  while($row = $result->fetch_assoc()) {
    echo "id: " . $row["id"]. " - Content1: " . $row["content1"]. " - content2: " . $row["content2"]. "<br>";
  }
} else {
  echo "0 results";
}
$conn->close();
?>


Wat er vervolgens zou moeten eigenlijk is dat onderstaande als het ware automatisch zou moeten worden aangemaakt. Dit kan ik dus niet handmatig aanmaken, omdat ik niet weer welke variablenamen in de database voorkomen!!

$rij1titel1 = $row['rij1titel1'];
$rij1titel2 = $row['rij1titel2'];
$rij90tekst1 = $row['rij90tekst1'];
$rij90tekst2 = $row['rij90tekst2'];

zit zorgt er uiteindelijk ook voor dat ik de inhoud kan worden weergeven in php


<h1>Onderstaand de weergave van de inhoud</h1>
<h1 contenteditable="plaintext-only"><?php echo $rij1titel1; ?></h1>
<h2 contenteditable="plaintext-only"><?php echo $rij1titel2; ?></h1>

<p contenteditable="plaintext-only"><?php echo $rij90tekst1; ?></p>
<p contenteditable="plaintext-only"><?php echo $rij90tekst2; ?></h1>


h1 zou dus "hallo iedereen" moeten weergeven etc.. etc..
Je kan ook prima een configuratie maken met een array in een aparte config.

<?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

?>

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.
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.
$rij1titel1 dit zegt niemand wat.

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.
he arien. jij ook bedankt voor je reactie. Ik denk dat ik nu genoeg heb om verder mee te gaan. iedereen nogmaals super bedankt.
Zie mijn edit met wat meer info. ;-)

Succes! :-)
Ivo P op 31/08/2023 22:26:57

Ik zou in plaats van

<h1 contenteditable="plaintext-only"><?php echo $rij1titel1; ?></h1>


meer zien in


<h1 contenteditable="plaintext-only">{rij1titel1}</h1>




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.


[size=xsmall]Toevoeging op 31/08/2023 22:30:05:[/size]

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?
Maar bovenstaande code wordt dan toch alleen {rijtitel1} weergegeven


file1.template:

<h1 contenteditable="plaintext-only">{rij1titel1}</h1>


Datebase tabel

id   placeholder   inhoud
1    inhoud_a      hier een lap tekst
2    rij1titel1    Dit is de titel


script.php
<?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;

?>
Dit wat Ivo schrijft is dus een eigen vorm van een templateparser, wat Smarty ook is.
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.
ah oke. op die manier. ik ga ernaar kijken. zal ook goed moet kijken wat voor mijn doel het beste werkt ook.
thx.

[size=xsmall]Toevoeging op 01/09/2023 11:42:17:[/size]

Ivo P op 01/09/2023 09:14:59

Maar bovenstaande code wordt dan toch alleen {rijtitel1} weergegeven


file1.template:

<h1 contenteditable="plaintext-only">{rij1titel1}</h1>


Datebase tabel

id   placeholder   inhoud
1    inhoud_a      hier een lap tekst
2    rij1titel1    Dit is de titel


script.php
<?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;

?>



dank je wel. er zit echter ergens een fout in de onderstaande syntax. Kan 'm alleen niet vinden. heb er al naar gekeken.


while ($row = mysqli_fetch_assoc($result)) {
    $inhoud = str_replace('{' . $row['placeholder'] . '}', htmlspecialchars($row['tekst]), $inhoud);
}

Reageren