Разделы

[Хак][Evo] Управление страницами не в дереве

Не так давно поднимался вопрос о управлении большим количеством страниц не используя дерево, где дали ссылку на решение yama (но код там не приводился) Захотелось реализовать у себя такое же управление страницами, то есть запретить раскрываться в дереве определенным папкам. Чтобы не создавать отдельное поле, использую поле donthit.
1. Файл manager/frames/tree.php Исправляем верхнюю часть функции treeAction

    function treeAction(id, name, treedisp_children) {
        if(ca=="move") {
            try {
                parent.main.setMoveValue(id, name);
            } catch(oException) {
                alert('<?php echo $_lang['unable_set_parent']; ?>');
            }
        }
        if(ca=="open" || ca=="") {
            if(id==0) {
                parent.main.location.href="index.php?a=2";
            } else {
                if(treedisp_children==0) {
                    parent.main.location.href="index.php?a=3&id=" + id + getFolderState();
                } else {
                    parent.main.location.href="index.php?a=<?php echo (!empty($modx->config['tree_page_click']) ? $modx->config['tree_page_click'] : '27'); ?>&id=" + id; // edit as default action
                }
            }
        }

2. Файл manager/frames/nodes.php
Добавяем donthit в строку 118 и $donthit в строку 134, где идёт перечисление полей.
Перед if (!$isfolder) { добавляем

            if ($donthit) {
                $icon = ($privateweb||$privatemgr) ? $_style["tree_folder_secure"] : $_style["tree_folder"];
                $output .= '<div id="node'.$id.'" p="'.$parent.'" style="white-space: nowrap;">'.$spacer.$pad.'<img id="p'.$id.'" align="absmiddle" title="'.$_lang['click_to_context'].'" style="cursor: pointer" src="'.$icon.'" onclick="showPopup('.$id.',\''.addslashes($pagetitle).'\',event);return false;" oncontextmenu="this.onclick(event);return false;" onmouseover="setCNS(this, 1)" onmouseout="setCNS(this, 0)" onmousedown="itemToChange='.$id.'; selectedObjectName=\''.addslashes($pagetitle).'\'; selectedObjectDeleted='.$deleted.'; selectedObjectUrl=\''.$url.'\'" /> ';
                $output .= '<span p="'.$parent.'" onclick="treeAction('.$id.', \''.addslashes($pagetitle).'\',0); setSelected(this);" onmouseover="setHoverClass(this, 1);" onmouseout="setHoverClass(this, 0);" class="treeNode" onmousedown="itemToChange='.$id.'; selectedObjectName=\''.addslashes($pagetitle).'\'; selectedObjectDeleted='.$deleted.'; selectedObjectUrl=\''.$url.'\';" oncontextmenu="document.getElementById(\'p'.$id.'\').onclick(event);return false;" title="'.addslashes($alt).'">'.$pagetitleDisplay.$weblinkDisplay.'</span> '.$pageIdDisplay.'</div>';
                continue;
            }

3. Настраиваем mm_rules.inc.php в ManagerManager:
mm_renameField('log', 'Дочерние ресурсы отображаются в дереве');
mm_changeFieldHelp('log', 'Это поле используется для папок с большим числом вложенных страниц'); Если MM не используется, можно исправить в языковом файле.

4. Файл manager/action/document_data.static.php
После docSettings.addTabPage( document.getElementById( «tabChildren» ) ); добавляем docSettings.setSelectedIndex(1); чтобы всегда открывался список дочерних страниц.
Перед строчкой // Get access permissions добавляем код:

$parent = $id ? ($modx->db->getValue("SELECT parent FROM " . $tbl_site_content . " WHERE id=$id LIMIT 1")) : 0;
$donthit = $parent ? ($modx->db->getValue("SELECT donthit FROM " . $tbl_site_content . " WHERE id=$parent LIMIT 1")) : 0;
if ($donthit) {$id=$_REQUEST['id']=$parent;}

Чтобы при закрытии или сохранении вложенных страниц перебрасывало на общий список.

Теперь достаточно снять галочку с «Дочерние ресурсы отображаются в дереве» и они не будут выводится даже при полном раскрытии дерева. Иконки останутся в виде папок.

UPD: Немного доработал список страниц:

Прикрепляю все файлы.
  • +6
  • 23 июля 2010, 14:44
  • Temus

Комментарии (23)

RSS свернуть / развернуть
0
Ну это еще не законченное решение конечно, хотя базис неплохой.

К этому нужно еще основательно переделать страницу «Просмотр дочерних ресурсов» — чтобы была навигация по вложенным папкам, чтобы была отдельная кнопка «опубликовать» и т.д.
Также нужно продумать наследование свойства отображения в дереве, чтобы не надо было при создании нового ресурса каждый раз кликать «Скрыть дочерние ресурсы из дерева».
avatar

antonkuzmin

  • 23 июля 2010, 15:02
0
Всмысле каждый раз кликать? Галочку только у родительской папки нужно снять, не у дочерних.
avatar

Temus

  • 23 июля 2010, 15:38
0
я имел в виду то, чтобы в каталоге допустим у всех создаваемых категорий автоматически ставилась галка «donthit», наверное это можно через managermanager реализовать.
avatar

antonkuzmin

  • 18 августа 2010, 14:28
0
Вы молодец! Надо проверить, а с виду все окей!
avatar

pitbull

  • 23 июля 2010, 15:44
0
Temius, можно вас попросить выложить все исправленные файлы?
avatar

Leadmonkey

  • 29 июля 2010, 11:37
+1
добавил
avatar

Temus

  • 29 июля 2010, 11:58
0
Спасибо, очень полезная штука.
avatar

Leadmonkey

  • 29 июля 2010, 18:06
+1
Отловил маленкую багу в паджинации — при переходе на другую страницу не сохранялся порядок сортировки. Поправил строку 202 в document_data_static на $childsTable->createPagingNavigation($numRecords,'a=3&id='.$content['id'].'&dir='.$dir.'&sort='.$sort); Теперь работает
avatar

Leadmonkey

  • 3 августа 2010, 17:29
0
спасибо, заменил файл
avatar

Temus

  • 3 августа 2010, 18:12
0
применил патч на паре проектов, вроде все работает, как надо, спасибо :)
разве что, я увеличил количество отображаемых ресурсов в списке с 20 до 50, если надо, напишу, как это сделать.
avatar

antonkuzmin

  • 30 августа 2010, 08:49
0
напиши, будь добр =)
avatar

googa

  • 3 ноября 2010, 12:20
0
Такое ощущение что народ стремится добавить в MODx что-то от джумлы.
Зачем?
Табличный вид удобен, когда сотни доков, нужно их отсортировать для поиска необходимого. А в остальном…
avatar

Spirit412

  • 30 августа 2010, 21:35
+1
Это и делается в данном случае с целью работы с большим количеством документов.
avatar

Carw

  • 31 августа 2010, 12:28
0
Версия 1.04, не могу найти «Дочерние ресурсы отображаются в дереве». У меня есть «Контейнер (содержит дочерние ресурсы)». Убираю галку, нажимаю сохранить, появляется табличный просмотр. Перехожу в др ресурс, возвращаюсь — все по старому, галка на месте и выпадающий список тоже. WTF?
avatar

googa

  • 3 ноября 2010, 11:39
+1
«Дочерние ресурсы отображаются в дереве» это бывший «Регистрировать посещения», переименованный ManagerManager (3й пункт)
avatar

Temus

  • 3 ноября 2010, 12:07
0
Спасибо, все работает!
avatar

googa

  • 3 ноября 2010, 12:09
0
Спасибо за хак! Однако не могу понять почему в 1.0.5. при создании нового документа перебрасывает на главную страницу, а не на список? :( При редактировании старого туда куда нужно — в список…
avatar

z211

  • 2 февраля 2011, 11:40
+1
При создании нового документа в MODx всегда перебрасывает на главную, как и при удалении. Чтобы перебрасывало на список, нужно в файле save_content.processor.php
поменять в строке 406
$header = "Location: index.php?r=1&id=$id&a=7&dv=1";
на
$header = "Location: index.php?r=1&id=$key&a=7&dv=1";

В файлах delete_content.processor.php и undelete_content.processor.php поменять
$header="Location: index.php?r=1&a=7";
на
$header="Location: index.php?r=1&a=7&id=$id&dv=1";
avatar

Temus

  • 2 февраля 2011, 15:18
0
Спасибо! Отлично работает.
avatar

z211

  • 2 февраля 2011, 22:08
0
А как увеличивать кол-во страниц в списке? Например до 100?
И поставить по умолчанию фильтрацию по «Заголовку ресурса»?
avatar

zzakirow

  • 29 мая 2011, 00:54
0
1. В конфигурации на вкладке «Интерфейс и представление» поставить «Количество результатов» равным 100
2. Найти в моём document_data.static.php
$sort = isset($_REQUEST['sort']) ? $_REQUEST['sort'] : 'createdon' ;
и createdon заменить на pagetitle
avatar

Temus

  • 29 мая 2011, 03:59
0
Спасибо. Очень помогло!
avatar

zzakirow

  • 31 мая 2011, 03:06
0
А как сделать возможность удалять несколько пунктов одновременно?
avatar

igor

  • 18 января 2012, 21:52

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.