Как отключить пункты главного меню Alfresco?

#alfresco #alfresco-share

#alfresco #alfresco-поделиться

Вопрос:

Главное меню приложения Alfresco Share содержит несколько пунктов, которые команда проекта для нашего развертывания хочет отключить. В частности, «Мои файлы» и «Общие файлы». Скрытие было бы достаточно хорошим, но если мы сможем отключить их полностью, это было бы лучше всего. Это функции, к которым пользователи не должны иметь никакого доступа. Все их взаимодействия должны осуществляться через сайты.

Поддерживается ли Alfresco (например, «не будет ломаться при обновлении версий») способ сделать это?

Комментарии:

1. о какой версии вы говорите?

2. В настоящее время мы находимся на 4.2e.

Ответ №1:

У вас есть сообщение в блоге, описывающее, как скрыть пункты главного меню по этой ссылке. Позже выяснилось, что этот подход не работает в версиях ниже 4.2.2. это относится и к версии вашего сообщества (4.2e).

Вы можете использовать обходной путь, описанный по этой ссылке. Ниже приведен точный код, который вам нужен. В нижней части share-header.get.js добавьте следующее

 var widget, widgetsToRemove = [ "HEADER_SHARED_FILES", "HEADER_MY_FILES" ], idx, max;

for (idx = 0, max = widgetsToRemove.length; idx < max; idx  )
{  
    findAndRemoveIn(model.jsonModel.widgets, null, null, widgetsToRemove[idx]);
}


function findAndRemoveIn(obj, arrContext, arrIdx, id) {
var idx, max, key;
if (obj !== undefined amp;amp; obj !== null) {
    if (Object.prototype.toString.apply(obj) === "[object Object]") {
        if (obj.hasOwnProperty("id") amp;amp; obj.id === id) {
            if (arrContext !== null amp;amp; arrIdx !== null)
            { arrContext.splice(arrIdx, 1); }

            else
            { logger .debug("Unexpected match outside of array structure: "   jsonUtils.toJSONString(obj)); }

        } else {
            for (key in obj) {
                if (obj.hasOwnProperty(key))
                { findAndRemoveIn(obj[key], null, null, id); }

            }
        }
    } else if (Object.prototype.toString.apply(obj) === "[object Array]") {
        for (idx = 0, max = obj.length; idx < max; idx  )
        { findAndRemoveIn(obj[idx], obj, idx, id); }

    }
  }
}   
  

Позже вы сможете написать модуль расширения, когда это заработает.
Другие элементы, такие как HEADER_NAVIGATION_MENU_BAR, HEADER_TITLE_MENU, HEADER_TITLE, можно удалить из меню с помощью widgetUtils.Вспомогательная функция deleteObjectFromArray.
Последний вариант — использовать CSS.

Комментарии:

1. Я использовал это на 4.2f, и это сработало. Вы знаете свои цели. 🙂

2. AFAIK 4.2.2 — корпоративная версия

3. Бьюсь об заклад, это будет работать в версии 4.2e. Однако я не думаю, что у вас должны возникнуть проблемы с использованием 4.2f

4. Хммм, я, должно быть, делаю что-то не так. Сбой Alfresco с сообщением «05200001 не удалось выполнить сценарий ‘classpath*:alfresco/site-webscripts/org/alfresco/share/header/share-header.get.js ‘: 05200000 Ошибка типа: не удается прочитать свойство «виджеты» из null (файл:/C:/Alfresco/tomcat/webapps/share/WEB-INF/classes/alfresco/site-webscripts/org/alfresco/share/header/share-header.get.js #1917)» ошибка при вставке javascript в share-header.get.js досье.

5. Теперь это работает. Я столкнулся с проблемами, связанными с тем, что servicerun, по-видимому, не работал без сбоев, что означало, что я не всегда видел обновления. Перезагрузка компьютера кажется единственным надежным способом заставить Alfresco полностью перезапуститься. Кроме того, одна из моих предыдущих проблем, по-видимому, заключалась в размещении кода в верхней части файла вместо нижней… Спасибо!