Ajuda com lógica - Tabela de comparativos entre planos
Fala galera,
Tenho a seguinte tabela no meu site, e hoje, ela é estática (não atualizável por CMSs). Ela tem mais linhas do que essa imagem, mas peguei só um pedaço para ilustrar.
Hoje, no meu banco de dados, eu tenho esses 3 planos (ACO, ACO FIT e ACO Modular) cadastrados em uma tabela chamada "sistema_planos". Cada plano tem UM produto cadastrado em "sistema_produto" e interligados por uma tabela chamada "sistema_plano_produto". Dentro de cada produto, existem os módulos que, na imagem acima, são ilustrados alinhados na coluna da esquerda. Esses módulos estão cadastrados em uma tabela chamada "sistema_modulo" e interligados no produto através de uma tabela chamada "sistema_produto_modulo".
Preciso montar essa tabela da imagem consultando as informações no banco. Consegui, mas devido a alta quantidade de consultas no banco, em 80% das vezes dá TIMEOUT.
Então, acho que há algo errado na lógica que construí. Gostaria de dicas de como proceder!
$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>";
}
Resultado esperado:
<table class="tabelaPreco table table-bordered table-striped">
<thead>
<tr>
<th width="25%" style="background:#f3f3f3"></th>
<th width="25%">A.C.O</th>
<th width="25%">A.C.O Fit</th>
<th width="25%">A.C.O Modular</th>
</tr>
<tr>
<th style="background:#f3f3f3"></th>
<th>A partir de<br><span>R$299</span> mensais<br><small>+ Taxa de ativação da licença e tempo mínimo de contrato: 12 meses</small></th>
<th>A partir de<br><span>R$149</span> mensais<br><small>+ Taxa de ativação da licença e tempo mínimo de contrato: 12 meses</small></th>
<th>Consulte<br><small>+ Taxa de ativação da licença e tempo mínimo de contrato: 12 meses</small></th>
</tr>
</thead>
<tbody>
<tr>
<td>Base de bancos</td>
<td><i class="fa fa-check"></i></td>
<td><i class="fa fa-check"></i></td>
<td><i class="fa fa-check"></i></td>
</tr>
<tr>
<td>Base CEP integrada</td>
<td><i class="fa fa-check"></i></td>
<td><i class="fa fa-check"></i></td>
<td><i class="fa fa-check"></i></td>
</tr>
<tr>
<td>Relatórios personalizáveis</td>
<td><i class="fa fa-check"></i></td>
<td><i class="fa fa-check"></i></td>
<td><i class="fa fa-check"></i></td>
</tr>
</tbody>
</table>Discussão (0)
Carregando comentários...