Problem
Jako Moderator Wiki mam możliwość przenoszenia stron w Kompendium (z tego, co pamiętam, ta funkcja nie jest dostępna dla zwykłych użytkowników). Jest to realizowane za pomocą specjalnej strony, na której jest kontrolka z listą możliwych "nadstron" (?). Jednak z racji tego, że lista zawiera chyba wszystkie strony z Kompendium, znalezienie odpowiedniej pozycji na niej jest trudne. Raz, że pozycji jest bardzo dużo, a dwa, że nawet podczas samego przewijania listy obserwuję u siebie lagi spowolnienie działania przeglądarki.
Zachowanie aktualne
Lista możliwych "nadstron" zawiera wszystkie (?) strony z Kompendium.
Zachowanie oczekiwane
Lista możliwych "nadstron" zawiera jakiś podzbiór stron z Kompendium. Ewentualnie zamiast jednej listy są dwie listy, jedna zawierająca strony poziomów 1 i 2, a druga strony poziomów od 3 w górę dla wybranego danego poziomu na pierwszej liście (wybór poziomów tak ustaliłem, żeby jakoś równomiernie rozłożyć liczbę stron w obu listach).
UPDATE
@Adam Boduch, czy dobrze myślę, że wypełnianie tej listy jest wykonywane przez tę funkcję? (Pomijam ciąg wywołań do niej prowadzący). Zamieszczę ją poniżej:
public function treeList()
{
$this->applyCriteria();
$result = [];
$data = $this->model->from($this->rawFunction('wiki_children'))->get(['id', 'title', 'depth']);
foreach ($data as $row) {
$result[$row['id']] = str_repeat(' ', $row['depth'] * 4) . $row['title'];
}
return $result;
}
UPDATE 2
@Adam Boduch, czy dobrze myślę, że wystarczy powyższą funkcję zmienić w ten sposób?
public function treeList()
{
$this->applyCriteria();
$result = [];
$data = $this->model->from($this->rawFunction('wiki_children'))->get(['id', 'title', 'depth']);
foreach ($data as $row) {
if ($row['depth'] <= 2) {
$result[$row['id']] = str_repeat(' ', $row['depth'] * 4) . $row['title'];
}
}
return $result;
}
Nietestowane i nie znam się na PHP. Ale patrząc na PHP jako na pseudokod, to ta zmiana wydaje się robić wszystko, czego oczekiwałbym.
PS No nie, oczywiście, zapomniałem, że gdzieś pozostałe poziomy trzeba umieścić. <myśli>
UPDATE 3
To może tak? Będzie wymagać więcej zmian w kodzie wywołującym tę funkcję, ale na razie dla uproszczenia tylko to pokazuję.
public function treeList()
{
$this->applyCriteria();
$double_result = [[], []];
$data = $this->model->from($this->rawFunction('wiki_children'))->get(['id', 'title', 'depth']);
foreach ($data as $row) {
if ($row['depth'] <= 2) {
$double_result[0][$row['id']] = str_repeat(' ', $row['depth'] * 4) . $row['title'];
} else {
$double_result[1][$row['id']] = str_repeat(' ', $row['depth'] * 4) . $row['title'];
}
}
return $double_result;
}