Classe PHP pour tableau HTML : attribution d'attributs étranges
<p>Dans la classe qui construit le tableau HTML, j'ai cette méthode qui restitue le tableau. Tout fonctionne bien sauf l'attribution d'attributs HTML sous certaines conditions (indentation, balises fermantes, représentation des données, etc.). Lorsque je définis les données de la cellule, j'appelle setData() pour recevoir les trois paramètres et les utiliser comme ceci. Remarquez comment j'ai défini le troisième paramètre (propriété de cellule) : </p>
<p><strong>Définition de la méthode : </strong></p>
<pre class="brush:php;toolbar:false;">fonction publique setData(
tableau $données,
tableau $row_attributes = [],
tableau $cell_attributes = []
): booléen {
// le code
}</pré>
<p><strong>Appel : </strong></p>
<pre class="brush:php;toolbar:false;">$table->setData(
$pagination->resultset,
[], // attributs de ligne
array( // attributs de cellule
array(), // ligne 1 (index 0)
array( // rangée2 (index 1)
["id"=>"R2C1id"], // ligne 2, cellule 1
["id"=>"R2C2id", "onclick"=>"R2C2_onclick();"], // ligne 2, cellule 2
),
tableau( // ligne 3
[],
[],
["id"=>"R3C3id", "selected"=>"selected"], // ligne 3, cellule 3
[],
[],
[],
[]
)
)
);</pré>
<p>Dans cet exemple, le tableau comporte sept colonnes. </p>
<p>Ici, vous verrez la sortie HTML. Notez les propriétés des cellules des deuxième et troisième lignes : </p>
<pre class="brush:php;toolbar:false;"><div class='table-body'>
<div class='table-row'>
<div class='table-row-cell'>1</div>
<div class='table-row-cell'>Consumidor Final</div>
<div class='table-row-cell'>Consumidor Final</div>
<div class='table-row-cell'></div>
<div class='table-row-cell'>1</div>
<div class='table-row-cell'></div>
<div class='table-row-cell'></div>
</div>
<div class='table-row'>
<div class='table-row-cell' id='R2C1id'>2</div>
<div class='table-row-cell' id='R2C2id' onclick='R2C2_onclick();'>Prueba SRL</div>
<div class='table-row-cell' 0='Array' 1='Array'>Tu Prueba</div>
<div class='table-row-cell' 0='Tableau' 1='Tableau'>12345678901</div>
<div class='table-row-cell' 0='Array' 1='Array'>1</div>
<div class='table-row-cell' 0='Array' 1='Array'></div>
<div class='table-row-cell' 0='Tableau' 1='Tableau'></div>
</div>
<div class='table-row'>
<div class='table-row-cell'>3</div>
<div class='table-row-cell'>Otra Prueba SA</div>
<div class='table-row-cell' id='R3C3id' selected='selected'>Prueba 2</div>
<div class='table-row-cell'>12345678902</div>
<div class='table-row-cell'>1</div>
<div class='table-row-cell'></div>
<div class='table-row-cell'></div>
</div>
</div></pré>
<p>C'est le code que j'utilise pour faire tout cela. Je vais vous montrer l'extrait de code pour le rendu des cellules et comment gérer les propriétés. </p>
<p><strong>Rendu des cellules : </strong></p>
<pre class="brush:php;toolbar:false;">// cellules de processus
$compteur_ligne = 0 ;
foreach ($this->data as $data) { // ligne
$row_build = "";
$ compteur_cellule = 0 ;
foreach ($data as $cell_data) { // cellule
si ($cell_counter < $col_count) {
$row_build .= $this->getHtmlDiv(
$html_cell_class,
$cell_data ??
$this->getHtmlAttributes("cell", $row_counter, $cell_counter),
3
);
}
$cell_counter++;
}
// $cell_counter++;
// complète les cellules vides pour préserver la ligne : survolez la ligne complète
tandis que ($cell_counter < $col_count) {
$row_build .= $this->getHtmlDiv(
$html_cell_class,
"",
$this->getHtmlAttributes("cell", $row_counter, $cell_counter),
3
);
$cell_counter++;
}
$body_build .= $this->getHtmlDiv(
$html_row_class,
$row_build,
$this->getHtmlAttributes("ligne", $row_counter, 0),
2,
vrai
);
$row_counter++;
}</pré>
<p><strong>Méthodes d'attribut :</strong></p>
<pre class="brush:php;toolbar:false;">fonction privée getHtmlAttributes(string $section, int $row, int $column) : tableau
{
if (count($this->html_attributes[$section]) > 0) {
if (array_key_exists($row, $this->html_attributes[$section])) {
if ($section === "cellule") {
if (array_key_exists($column, $this->html_attributes[$section][$row])) {
return $this->html_attributes[$section][$row][$column];
}
}
return $this->html_attributes[$section][$row];
}
}
retour [];
}</pré>
<p>Qu'est-ce qui ne va pas ? Merci. </p>