Панель администратора отсутствует

Здравствуйте, все вместе,

примерно два месяца у меня отсутствует левая боковая панель администратора (см. скриншот). Я не могу найти ни в настройках, ни в другом месте возможность её “включить”. Даже при использовании окна браузера в режиме инкогнито наблюдается та же проблема.
У кого-нибудь есть идеи, в чём может быть причина?

С наилучшими пожеланиями
Mr. Xurrent

Добро пожаловать на форум :wave:

Вы пробовали включить безопасный режим? Это поможет исключить проблему, вызванную плагином или компонентом.
Вы также можете проверить, есть ли сообщения об ошибках в консоли браузера.

Привет!

Я как раз сейчас это протестировал, и в «безопасном режиме» боковая панель администратора отображается.
Не подскажешь, какое дополнение или компонент могут вызывать эту проблему?

Чтобы сузить круг поиска, вы можете сначала отключить плагины в безопасном режиме, а затем — темы. Так вы хотя бы будете знать, в каком направлении искать.

В целом оба раздела находятся в боковой панели администратора — теперь, когда вы снова можете её видеть. Для плагинов есть отдельный раздел. Вы также можете добавить /admin/plugins к URL вашего форума. Темы можно найти в разделе «Внешний вид» или по адресу /admin/config/customize/themes.

Скорее всего, это специфическая настройка именно для вашего форума, поскольку я пока не слышал о других пользователях с подобной проблемой. Без знания того, какие сторонние плагины (не разработанные командой Discourse) вы используете, какие компоненты тем и какие собственные настройки у вас есть, сложно что-либо предположить.

1 лайк

Были активированы только плагины, опубликованные самой командой Discourse.
Я отключил все плагины — проблема сохраняется.

В качестве темы используется тема «Foundation». Независимо от того, какую тему я выбираю для просмотра превью, административная боковая панель слева отсутствует везде.

Компоненты не установлены.

Ты пробовал сузить круг поиска, используя различные опции безопасного режима, чтобы определить, проблема в теме или в плагине?

Только что проверил.
Если я активирую только опцию “Выдавать ошибку при использовании устаревших функций JavaScript”, то в “безопасном режиме” также проявляется эта ошибка.

вы проверяли консоль браузера на наличие ошибок?

1 лайк

Это меня не удивляет, значит, ни плагины, ни темы не отключены. Однако это не отвечает на вопрос, является ли причиной проблемы тема или плагин.

Работает ли боковая панель, если отключить только темы?

Тогда мы могли бы исключить плагины как причину. В противном случае я бы действовал систематически и отключил неофициальные плагины.

А если это тоже не поможет, то остается только третий вариант.

Достаточно ли этого для решения такой проблемы? Или потребуется пересборка в каждом раунде?

Именно это я и имел в виду в своих предыдущих сообщениях.
То есть, во-первых, я поочередно отключал все плагины (что не изменило картину ошибки), и во-вторых, независимо от того, какую из трех верхних опций я отключал — в «безопасном режиме» у меня слева отображалось административное боковое меню.

Если я активирую опцию «Выдавать ошибку при использовании устаревших функций JavaScript», то в «безопасном режиме» административное боковое меню слева больше не отображается.

Хм. Это необычно. Я ожидал бы эффекта «или-или». Это должно означать, что проблема либо в взаимодействии между плагином и темой, либо не в том и не в другом.
Думаю, сейчас действительно может помочь консоль браузера.

Там мне показываются две ошибки:

  1. admin-sidebar.js:378 Uncaught (in promise) TypeError: n.admin_config_login_routes.map is not a function
  2. api-sections.gjs:23 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading ‘map’)

1 лайк

Отлично! Здесь можно увидеть, на какой строке кода возникает проблема.

Похоже, что код является решением этой проблемы Changing the target audience of Enable form templates incorrectly creates an Update Discourse option in the left sidebar - #2 by zogstrip

1 лайк

Ошибка, указанная там, сейчас не отражает картину ошибки, которая у меня наблюдается.
Кроме того, из этого сообщения не совсем понятно, что именно мне нужно изменить, чтобы всё снова заработало :sweat_smile:.

Я предполагаю, что ваша проблема вызвана изменениями, внесенными для решения связанной проблемы. Я не уверен, что вы можете что-то изменить в этой ситуации. Надеюсь, кто-то, кто лучше разбирается в этом коде, скоро найдёт время, чтобы взглянуть на это.

1 лайк

Привет, @Mr.Xurrent! Я пытался воспроизвести проблему локально, но не смог, независимо от конфигурации моих плагинов. Вы сказали, что включены только плагины от команды, но установлены ли у вас какие-либо другие плагины, которые отключены?

Также попробуйте выполнить следующий код в консоли, когда вы видите ошибку, и вставьте результат сюда:

(() => {
  const raw = JSON.parse(
    JSON.parse(document.querySelector("#data-preloaded").textContent).site
  ).admin_config_login_routes;

  const live = Discourse.__container__
    .lookup("service:site")
    .admin_config_login_routes;

  return {
    raw,
    rawType: typeof raw,
    rawConstructor: raw?.constructor?.name,
    rawIsArray: Array.isArray(raw),

    live,
    liveType: typeof live,
    liveConstructor: live?.constructor?.name,
    liveIsArray: Array.isArray(live),
    liveHasMap: typeof live?.map === "function",

    arrayPrototypeHasMap: typeof Array.prototype.map === "function",
  };
})()

На данном этапе я действительно не понимаю, как у вас может получиться значение для admin_config_login_routes, которое не поддерживает метод map. Когда я отключаю все плагины на сервере с помощью LOAD_PLUGINS=0, я получаю пустой массив. В остальных случаях у меня есть массив значений. И в том, и в другом случае метод map работает, но что-то вроде {} или "oauth2" вне массива вызвало бы ошибку.

1 лайк

Привет, @tannerabread,

верно, были активны только плагины, опубликованные самим Discourse — других плагинов не установлено.

Я вставил указанный вами блок текста в консоль браузера, но ничего не изменилось, и консоль также не выдала никаких сообщений.

Плагин “OAuth2” не был активирован ни в какой момент.

Только для ясности: я не ожидал, что этот блок кода что-то изменит, — но я ожидал увидеть какой-либо вывод, даже если значения были бы null или undefined.

И ещё немного: то, что плагин включён или отключён, не должно влиять на его наличие в admin_config_login_routes, если только приложение явно не разгружает все плагины при запуске сервера с LOAD_PLUGINS=0.


С помощью блока кода в консоли, который я попросил вас выполнить, я надеялся увидеть значение (или отсутствие значения) в admin_config_login_routes. Не должно быть возможным, чтобы оно было пустым, и даже пустой массив должен работать для функции map.

Это в основном мои размышления, и я ещё подумаю о том, как мы можем разобраться в этой ситуации. Было бы здорово увидеть больше деталей вашей конфигурации, даже несмотря на то, что вы сказали, что у вас установлены только официальные плагины Discourse.

Я думаю, что хороший вопрос здесь: все ли установленные вами плагины являются стандартными, которые поставляются с ядром Discourse, или у вас также установлены какие-либо дополнительные плагины из Discourse?

1 лайк