Hi, i resolved the speed on the panel with to things:
- coding a custom page section taht access directly to the database and then generate the pages
- change the way taht page model generate ID (this slow the query more than other things)
request loading time on a shared 5usd server
pagemodel
public function id(): string
{
return $this->id = 'dbafiliados/'. $this->nro_afiliado() . '/' . $this->uid();
}
custom page section controller php
<?php
// use Exception;
use Kirby\Cms\Pages;
use Kirby\Cms\Site;
use Kirby\Toolkit\A;
use Kirby\Toolkit\Query;
$pagesSection = require kirby()->root('kirby').'/config/sections/pages.php';
return A::merge($pagesSection, [
'props' => [
'query' => function($query = null) {
return $query;
},
'search' => function ($search = true) {
return $search;
},
],
'computed' => [
'pages' => function () {
$authData = [];
if ($query = get('q')) {
if(strpos($query, '+') !== FALSE){
$query_arr = explode('+', $query);
$query_a = $query_arr[0];
$query_b = $query_arr[1];
$dba = Db::select('datos', ['fecha','idc','nota_interna', 'observaciones' ,'localidad', 'especialidad', 'profesional','plantilla', 'slug', 'title', 'status', 'nro_afiliado', 'prestador', 'codigos_manuales', 'codigos_nn'], "(nota_interna like '%$query_a%' or observaciones like '%$query_a%' or localidad like '%$query_a%' or especialidad like '%$query_a%' or profesional like '%$query_a%' or nro_afiliado like '%$query_a%' or prestador like '%$query_a%' or codigos_manuales like '%$query_a%' or codigos_nn like '%$query_a%') AND (nota_interna like '%$query_b%' or observaciones like '%$query_b%' or localidad like '%$query_b%' or especialidad like '%$query_b%' or profesional like '%$query_b%' or nro_afiliado like '%$query_b%' or prestador like '%$query_b%' or codigos_manuales like '%$query_b%' or codigos_nn like '%$query_b%')", 'fecha DESC, slug DESC');
} else {
$dba = Db::select('datos', ['fecha','idc','nota_interna', 'observaciones' ,'localidad', 'especialidad', 'profesional','plantilla', 'slug', 'title', 'status', 'nro_afiliado', 'prestador', 'codigos_manuales', 'codigos_nn'], "nota_interna like '%$query%' or observaciones like '%$query%' or localidad like '%$query%' or especialidad like '%$query%' or profesional like '%$query%' or nro_afiliado like '%$query%' or prestador like '%$query%' or codigos_manuales like '%$query%' or codigos_nn like '%$query%'", 'fecha DESC, slug DESC');
}
} else {
$dba = Db::select('datos', ['fecha','idc','nota_interna', 'observaciones' ,'localidad', 'especialidad', 'profesional','plantilla', 'slug', 'title', 'status', 'nro_afiliado', 'prestador', 'codigos_manuales', 'codigos_nn'], null, 'fecha DESC, slug DESC');
}
foreach ($dba as $autorizacion) {
$authData[] = [
'slug' => $autorizacion->slug(),
'num' => $autorizacion->status() === 'listed' ? 0 : null,
'template' => $autorizacion->plantilla(),
'model' => 'dbautorizacionlist',
'content' => [
'title' => empty($autorizacion->title()) ? $autorizacion->idc() : $autorizacion->title() ,
'status' => is_null($autorizacion->status()) ? 'unlisted' : $autorizacion->status(),
'fecha' => $autorizacion->fecha(),
'nro_afiliado' => $autorizacion->nro_afiliado(),
// 'fecha_emision' => $autorizacion->fecha_emision(),
// 'fecha_recepcion' => $autorizacion->fecha_recepcion(),
'prestador' => $autorizacion->prestador(),
// 'coseguro' => $autorizacion->coseguro(),
'codigos_manuales' => $autorizacion->codigos_manuales(),
'codigos_nn' => $autorizacion->codigos_nn(),
// 'diagnostico' => $autorizacion->diagnostico(),
'observaciones' => $autorizacion->observaciones(),
// 'informe' => $autorizacion->informe(),
// 'creado' => $autorizacion->creado(),
'nota_interna' => $autorizacion->nota_interna(),
// 'mensajeria' => $autorizacion->mensajeria(),
// 'pdf' => $autorizacion->pdf(),
'localidad' => $autorizacion->localidad(),
'especialidad' => $autorizacion->especialidad(),
'profesional' => $autorizacion->profesional(),
// 'diagnostico' => $autorizacion->diagnostico(),
// 'memo' => $autorizacion->memo(),
]
];
}
$mo = pages('dbautorizaciones');
$pages = Pages::factory($authData, $mo);
// search
// if ($query = get('q')) {
//
// if(strpos($query, '+') !== FALSE){
// $query_arr = explode('+', $query);
// foreach($query_arr as $query){
// $pages = $pages->search($query)->sortBy('fecha', 'desc', 'slug', 'desc');
// }
// } else {
// $pages = $pages->search($query)->sortBy('fecha', 'desc', 'slug', 'desc');
// }
// }
// // loop for the best performance
// foreach ($pages->data as $id => $page) {
// // remove all protected pages
// if ($page->isReadable() === false) {
// unset($pages->data[$id]);
// continue;
// }
// // filter by all set templates
// if ($this->templates && in_array($page->intendedTemplate()->name(), $this->templates) === false) {
// unset($pages->data[$id]);
// continue;
// }
// }
// // sort
// if ($this->sortBy) {
// $pages = $pages->sortBy(...$pages::sortArgs($this->sortBy));
// }
// // flip
// if ($this->flip === true) {
// $pages = $pages->flip();
// }
// pagination
$pages = $pages->paginate([
'page' => $this->page,
'limit' => $this->limit
]);
return $pages;
},
'add' => function () {
if ($this->query) {
return false;
}
if ($this->create === false) {
return false;
}
if (in_array($this->status, ['draft', 'all']) === false) {
return false;
}
if ($this->isFull() === true) {
return false;
}
return true;
},
],
'toArray' => function () {
return [
'data' => $this->data,
'errors' => $this->errors,
'options' => [
'add' => $this->add,
'empty' => $this->empty,
'headline' => $this->headline,
'help' => $this->help,
'layout' => $this->layout,
'link' => $this->link,
'max' => $this->max,
'min' => $this->min,
'search' => $this->search,
'size' => $this->size,
'sortable' => $this->sortable
],
'pagination' => $this->pagination,
];
}
]);