I have the following table on my site, and today it is static (not updatable by CMSs). It has more lines than this image, but I just took a piece to illustrate.
Today,inmydatabase,Ihavethese3plans(ACO,ACOFITandACOModular)registeredinatablecalled"system_plans". Each plan has A product registered in "product_product" and interconnected by a table called "product_platform". Within each product, there are modules that, in the image above, are shown aligned in the left column. These modules are registered in a table called "system_module" and interconnected in the product through a table called "module_model_product".
I need to mount this table of images by looking at the information in the database. I managed, but due to the high number of queries, in 80% of the time it gives TIMEOUT.
So, I think there's something wrong with the logic I built. I would like tips on how to proceed!
$divTabela = "";
$listaHead01 = "";
$listaHead02 = "";
$listaModulo = "";
$listaFoot = "";
/ * Traz os planos pra montar a tabela
$objPlano = new Plano();
$objPlano->plaAtivo = "S";
$objPlano->plaExcluido = "N";
$resultadoPlano = $objPlano->load(false, "plaValor DESC");
if(!empty($resultadoPlano)){
// * Inicia os objetos
$objPlanoProduto = new PlanoProduto();
$objProdutoModulo = new ProdutoModulo();
$objModulo = new Modulo();
$objModulo->modAtivo = "S";
$objModulo->modExcluido = "N";
$arrayProdutoId = array();
// * Loop de planos
foreach($resultadoPlano as $plano){
$valorPlano = (!empty($plano['plaValor'])) ? "A partir de<br><span>R$".number_format($plano['plaValor'],2,",",".")."</span> mensais<br><small>+ Taxa de ativação da licença e tempo mínimo de contrato: 12 meses</small>" : "Consulte";
// * Headings
$listaHead01 .= "<th width=\"20%\">".$plano['plaTitulo']."</th>";
$listaHead02 .= "<th>".$valorPlano."</th>";
// * Footers
$listaFoot .= "<td><a class=\"btn-arq\" href=\"/produto/".$plano['plaAlias']."\">Mais detalhes</a></td>";
// * Precisamos saber agora qual ícone irá em cada TD
// * Para isso, traremos primeiro o produto do plano $i
// * Com o produto definido, podemos saber quais módulos cada produto tem disponível
$objPlanoProduto->plaId = $plano['plaId'];
$resultadoPlanoProduto = $objPlanoProduto->load();
if(!empty($resultadoPlanoProduto)){
$arrayProdutoId[] = $resultadoPlanoProduto[0]['proId'];
}
}
// * Traz a lista de módulos
$resultadoModulo = $objModulo->load();
if(!empty($resultadoModulo)){
foreach($resultadoModulo as $modulo){
// * Inicia as variáveis
$tdPlano = "";
// * Tbody
// * Pra cada plano, cria uma TD
for($i = 0; $i < count($resultadoPlano); $i++){
$iconeCheck = "";
// * Agora, trazemos os módulos do produto
$objProdutoModulo->proId = $arrayProdutoId[$i];
$objProdutoModulo->modId = $modulo['modId'];
$resultadoProdutoModulo = $objProdutoModulo->load(true);
if(!empty($resultadoProdutoModulo)){
// * Verifica se o produto é modular
if($resultadoPlano[$i]['plaValor'] > 0){
$iconeCheck = "<i class=\"fa fa-check\"></i>";
}
else{
$iconeCheck = "<i data-toggle=\"tooltip\" title=\"Item opcional. Consulte adição.\" class=\"fa fa-question\"></i>";
}
}
// * Monta no template
$tdPlano .= "<td>".$iconeCheck."</td>";
}
$listaModulo .= "
<tr>
<td>".$modulo['modTitulo']."</td>
".$tdPlano."
</tr>";
}
}
$divTabela = "
<table class=\"tabelaPreco table table-bordered table-striped\">
<thead>
<tr>
<th width=\"20%\" style=\"background:#f3f3f3\"></th>
".$listaHead01."
</tr>
<tr>
<th style=\"background:#f3f3f3\"></th>
".$listaHead02."
</tr>
</thead>
<tbody>
".$listaModulo."
</tbody>
<tfoot>
<tr>
<td></td>
".$listaFoot."
</tr>
</tfoot>
</table>";
}