Aanpasbaar class object
Ik wil graag een class maken om html taballen te genereren.
Nu wil ik het volgende bewerkstelligen.
Ik heb een class genaamd TableCell, welke ik aanroep :
$cell = new TableCell();
Nu wil ik dat $cell al direct de string <td><td/> bevat, zonder bv weer een functie te moeten aanroepen als :
$cellString - $cell->CellString();
Ook wil ik graag dat ik na het aanroepen van :
$cell = new TableCell();
dat ik nog iets kan toevoegen zoals bv een stuk tekst in de cell.
Mijn wens is bv het volgende :
$cell = new TableCell();
$cell->CssClass = "testclass"; // als het niet anders kan dan $cell::CssClass = "testclass"; of $cell->CssClass("testclass");
$cell->Value = "De tekst in de cell"; // Zelfde als de CssClass
Nu moet $cell het volgende bevatten :
<td class="testclass">De tekst in de cell<td/>
Ik probeer dus eigenlijk een beetje wat ook mogelijk is in C# omgeving.
Ik hoop dat iemand me een beetje op de goede weg kan helpen.
Alvast bedankt voor jullie advies.
///// Om je tabellen weer te geven /////////
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
// Tabellen
$tabellenreeks = mysql_query("SELECT * FROM tabellen");
$teller = 0;
while ($tabellen = mysql_fetch_assoc($tabellenreeks))
{
$teller++;
// data ophalen
$value1 = $tabellen['naam'];
$value2 = $tabellen['text'];
$cell .= '
<!-- bouw hier je tabel in html op bijvoorbeeld: -->
<table class="testclass">
<tr>
<td>
Naam:
</td>
<td>
<input type="text" name="poster" value="'.$value1.'"/>
</td>
</tr>
<tr>
<td>
Bericht:
</td>
<td>
<textarea name="text" cols="100" rows="15">'.$value2.'</textarea>
</td>
</tr>
</table>
';
}
?>
// Tabellen
$tabellenreeks = mysql_query("SELECT * FROM tabellen");
$teller = 0;
while ($tabellen = mysql_fetch_assoc($tabellenreeks))
{
$teller++;
// data ophalen
$value1 = $tabellen['naam'];
$value2 = $tabellen['text'];
$cell .= '
<!-- bouw hier je tabel in html op bijvoorbeeld: -->
<table class="testclass">
<tr>
<td>
Naam:
</td>
<td>
<input type="text" name="poster" value="'.$value1.'"/>
</td>
</tr>
<tr>
<td>
Bericht:
</td>
<td>
<textarea name="text" cols="100" rows="15">'.$value2.'</textarea>
</td>
</tr>
</table>
';
}
?>
<!-- dit is dus HTML -->
<body>
</body>
<!-- einde HTML -->
Op dezelfde manier kun je ook INSERT gebruiken en een formulier met action=add maken om een nieuwe invoer in je database te laden welke je vervolgens op de vorige manier (met SELECT) kunt lezen.
Deze code is om een idee te geven hoe je het kunt aanpakken, hij zal hoogstwaarschijnlijk niet werken als je hem kopieert. Als je niet snapt wat ik probeer duidelijk te maken of wat ik hier doe probeer ik het op een andere manier uit te leggen!
Gewijzigd op 03/08/2011 20:06:23 door Christopher A
Bedankt voor je reactie.
Dit is echter wat ik nu dus niet meer wil doen :-)
Ik wel echt class maken waarmee je tabellen kan opbouwen zonder zelf de html code te typen.
Mijn gedachte is dus dit :
$cell1 = new cell();
$cell1->Value = "text 1";
$cell2 = new cell();
$cell2->Value = "text 2";
$cell3 = new cell();
$cell3->Value = "text 3";
$row = new row();
$row->Add($cell1);
$row->Add($cell2);
$row->Add($cell3);
$table = new table();
$table->Add($row);
Nu moet $table deze text bevatten :
<table>
<tr>
<td>text 1</td><td>text 2</td><td>text 3</td>
</tr>
</table>
Ik weet uberhoud niet of dit mogelijk is op deze manier binnen php, aangezien ik deze functionaliteit ben tegen gekomen in een C# aspx omgeving, wat ik wel handig vond.
Mijn eind idee is om ook nog voordat de html code word verzonden naar de browser, dat ik eventueel ook nog op ID basis de tabellen kan beïnvloeden.
Gewijzigd op 03/08/2011 20:21:41 door Eelco Alosery
Helaas heb ik dit zelf nog niet uitgeprobeerd en gebruik ik deze methode te weinig om je er iets over te kunnen vertellen.
Wel weet ik dat je voor hetgeen dat je als laatst benoemd, voor dat een pagina wordt verzonden de content beïnvloeden, volgens mij beter Javascript kunt gebruiken zoals dat ook bij javascript contactformulieren gedaan wordt.
Dan kun je zonder dat pagina refresht alle informatie in de tekstvakken behouden/beïnvloeden zonder dat er wat verloren gaat. Je zou ook met session_start(); kunnen werken maar dan in dit geval refresht je pagina dus wel. Je informatie staat dan wel nog in de tekstvakken maar nu moet je handmatig een pagina terug gaan om hier weer bij te komen.
Gewijzigd op 03/08/2011 20:31:20 door Christopher A
class Cell
{
public $ID;
public $CssClass;
public $value;
public function Add($value = null)
{
$this->value = $value;
}
}
class Row
{
public $Row = "";
private $RowString = "";
public function Add(Cell $Cell)
{
if ($this->RowString == "")
{
$this->RowString = "\n <td id=\"".$Cell->ID."\" class=\"".$Cell->CssClass."\">".$Cell->value."</td>";
}
else
{
$this->RowString = $this->RowString."<td id=\"".$Cell->ID."\" class=\"".$Cell->CssClass."\">".$Cell->value."</td>";
}
$this->Row = " <tr>";
$this->Row .= " ".$this->RowString."\n";
$this->Row .= " </tr>\n";
}
}
class Table
{
public $Table = "";
public function Add(Row $Row)
{
$this->Table .= "<table>\n";
$this->Table .= $Row->Row;
$this->Table .= "</table>\n";
}
}
$Cell = new Cell();
$Cell->ID = "id";
$Cell->CssClass = "class";
$Cell->Add("cell tekst");
$Cell_2 = new Cell();
$Cell_2->ID = "id_2";
$Cell_2->CssClass = "class_2";
$Cell_2->Add("cell tekst_2");
$Row = new Row();
$Row->Add($Cell);
$Row->Add($Cell_2);
$Table = new Table();
$Table->Add($Row);
echo $Table->Table;
Dit levert op :
<table>
<tr>
<td id="id" class="class">cell tekst</td><td id="id_2" class="class_2">cell tekst_2</td>
</tr>
</table>
Wat ik nu nog jammer vind is dat ik dit nog moet doen : $Table->Table;
Daar zou ik nog graag een andere oplossing voor vinden.