TYPO3 щелчок по пункту меню должен обновлять только часть страницы

#html #typo3 #typo3-9.x

#HTML #typo3 #typo3-9.x

Вопрос:

У меня есть сборка страницы с TyYPO3 V9. Я должен разделить страницу где-то на 2 части. В первой части я называю это разделом заголовка. В разделе заголовка есть изображение, кнопки и проигрыватель. После раздела заголовка находится меню, за которым следует часть страницы, которая изменилась в зависимости от пункта меню.

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

Есть ли вероятность, что TYPO3 обновит только меню и часть под меню?

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

1. Обычно при написании вопросов добавляется вся возможная информация. Не зная кода, как кого-либо можно попросить решить ситуацию, подобную вашей? Ваш ли код? Содержит ли он Javascript? Без дополнительной информации это не гарантирует сохранения вашего вопроса активным.

Ответ №1:

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

Но вы можете создать его самостоятельно:
добавьте немного javascript для изменения элементов меню и запустите процедуру javascript, которая вызывает всю страницу и извлекает соответствующие части для замены на текущей странице.
Или укажите дополнительный тип страницы, который предоставляет только необходимые вам данные (меню и основное содержимое), например, в виде JSON.


Редактировать:

Поскольку у меня нет готового примера, я не могу скопировать его здесь.
Что касается AJAX, вы должны найти много примеров и библиотек. В зависимости от вашего предпочтительного фреймворка javascript (я буду использовать jquery) должны быть некоторые приятные процедуры.

сначала вам нужна функция javascript, которая заменяет основное содержимое другим фрагментом html.

 function replaceContent(replpaceHTML) {
$('#content').html(replaceHTML);
}
 

Тогда вам нужен поставщик для этого HTML.
поскольку вы используете TYPO3, вы можете определить другой тип страницы со специальным отображением, поэтому возвращается только основное содержимое без HTML-заголовка и без верхнего и нижнего колонтитулов страницы.

 AJAX = page
AJAX {
   typeNum = 12345
   config {
      disableAllHeaderCode = 1
      disablePrefixComment = true
      metaCharset = UTF-8
   }

   10 < styles.content.get
}
 

теперь вы можете получить основное содержимое каждой страницы https://domain.tld/index.php?id=123amp;type=12345 .

Поскольку ваше меню содержит обычные ссылки, вам необходимо изменить поведение вашего меню: добавьте обработчик событий к каждой ссылке, который вызывает процедуру javascript вместо перехода по ссылке.

 $('.menuitem').onClick(function (event) {
   var url = $this.attr('href');
   $.ajax({
    async: false,
    url: url   '?type=12345', // assuming complete URLs without parameters
    complete: function(data){
      var newContent = $(data.responseText);
      replaceContent(newContent);
    }
  });
  event.stopPropagation();
});
 

это будет содержать обычные недостатки AJAX: содержимое и URL-адрес больше не совпадают, поэтому добавление закладок к текущему содержимому (/ page) невозможно. также нет истории.
Но есть решения с дальнейшим использованием javascript.

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

1. Бернд, возможно, я недостаточно четко указал на это. Я не хочу менять меню, но меню меняется, когда я нажимаю элемент. Если я использую JSON для чего я использую Typo3? Единственные изменения, которые мне нужны, — это позаботиться о том, чтобы часть, которую я назвал заголовком, не была изменена или защищена для обновлений Typo3.

2. в зависимости от вида и стиля меню вам может потребоваться изменить меню (ACT и CUR могут измениться). в любом случае: вам нужна процедура AJAX на вашей странице, которая вызывает (основное) содержимое из TYPO3 для страницы, выбранной в меню. это можно сделать с помощью дополнительного pagetype . предоставляете ли вы заглушки JSON или HTML, зависит от вас. AJAX является гибким, как и рендеринг в TYPO3.

3. Извините, но я не понимаю, что мне делать? Я помещаю часть заголовка в iframe, но также этот iframe обновляется с помощью Typo3. Что мне действительно нужно, так это какой-то механизм, который позволяет избежать обновления части заголовка или того, что Typo3 — это только часть, в которой содержимое должно быть разделено, а не на всю страницу. Я уже использую загрузку jquery для автоматического обновления части экрана. Но я все еще хочу использовать typo3, когда кто-то щелкает по пункту меню. Поэтому, пожалуйста, объясните, как я могу использовать вызов AJAX, чтобы избежать этого.

4. Я набросал использование ajax в своем ответе.