Навигация AJAX в Wordpress — проблемы с постоянными ссылками

Итак, где я:

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

Чтобы создать у пользователя впечатление, что он/она на самом деле использует «книгу», я в первую очередь использовал сложную структуру (касается в основном места маркеров страниц):

  1. Каждая категория использует свой собственный шаблон (category-4.php, category-5.php и т. д.)
  2. single.php ведет к шаблонам, чувствительным к категориям (всего 6 категорий).

Когда я закончил, я обнаружил, что слишком много трафика было вызвано графическими элементами, поскольку они перезагружались при каждом клике, а страница работала невероятно медленно. Поэтому я подумал о решении AJAX и, наконец, использовал решение ezjax (http://www.fluidbyte.net/index.php?view=simple-ajax-content-changer-with-ezjax), которое в основном представляет собой скрипт, который позволяет все hrefs с определенным классом загружаются в определенный div в index.php. Когда содержимое ссылок загружается в div, я сохраняю код (и таким образом трафик) для интерактивного фона в других файлах шаблона и, таким образом, трафик.

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

В принципе, это именно то, что я хотел, но это все еще вызывает некоторые проблемы:

  1. В качестве файлов шаблонов одиночных сообщений, категорий, например. НЕ содержат фона, вы не можете использовать постоянные ссылки на них. На самом деле вы можете сделать это, но это будет выглядеть как половина страницы (http://www.palimpsest.eu/2011/02/01/differenzierung/). Очевидно, важно, чтобы посетители получили «нормальный» взгляд на контент.

  2. По какой-то причине некоторые плагины, которые должны связываться с идентификатором поста (например, Sexybookmarks или Flattr), не работают. Я предполагаю, что причина связана с 1. проблемой.

Теперь вот мои подходы, и я хотел бы спросить вас, какой из них вы считаете лучшим (или, может быть, вдохновить на другие способы решения проблемы):

  1. Заставляя single.php спрашивать, просматриваете ли вы встроенный сайт или заходите с внешнего сайта, а затем переходите к двум разным шаблонам (короткий и один со всем графическим контентом). В этом случае я не знаю, как заставить single.php понять, откуда вы пришли.

  2. Я думал об использовании AJAXed Wordpress, но я не уверен, что это удовлетворит мои потребности. Я также не вижу много документации о модуле навигации.

  3. Любой другой способ, который не обновит содержимое, которое уже находится во временных интернет-файлах.

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

С уважением, Лара


person Lara    schedule 01.02.2011    source источник


Ответы (1)


Добро пожаловать в СО. Я не уверен, понимаю ли я, что именно вы пытаетесь сделать, но вот обычная дилемма с AJAX-запросами контента только в WP: вам нужна ссылка, при нажатии на которую загружается страница, как обычно. Но вы также хотите использовать ту же ссылку для загрузки той же страницы через AJAX, и тогда вы не хотите, чтобы макет также загружался.

Предполагая, что это ядро ​​​​вашей проблемы, вот как я обычно справляюсь с этим:

// functions.php
function is_ajax_request() {
  return (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) &&   
          strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
}


// e.g. in index.php or any other template file:
<?php if (!is_ajax_request()) { get_header(); }  ?>

// ... Rest of your template ...

<?php if (!is_ajax_request()) { get_footer(); } ?>

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

Дайте мне знать, если это поможет вам, или иным образом объясните немного подробнее, что вам нужно. И я заметил, что люди здесь избегают слишком длинных вопросов. Так что чем короче, тем лучше ;)

person polarblau    schedule 01.02.2011
comment
Привет, Polarblau, спасибо за ответ. Так что, если я получу правильный код, я добавлю в свои шаблоны два кода: один для случая 1 (AJAX: ‹?php if (!is_ajax_request()) {}?›) и один для случая 2 (обычная ссылка: ‹?php еще {}>)? - person Lara; 02.02.2011
comment
И извините, что сделал это слишком длинным... но, к сожалению, я не могу сделать задачу короче, поэтому я попытался решить ее путем структурирования ;) У вас есть какие-либо идеи, в чем проблема с плагинами, которые пытаются поймать идентификатор поста? - person Lara; 02.02.2011
comment
Это отобразит заголовок (который содержит все ваши CSS/JS и т. д.) только в том случае, если вы запрашиваете страницу не с использованием AJAX, что обычно означает, что вы получите простой контент при использовании AJAX, который снова обычно нормально, так как у вас уже есть все остальное (навигация, стили, заголовок и т. д.) на странице. Поэтому вместо использования get_header() в своих шаблонах просто используйте if (!is_ajax_request()) { get_header(); }. else не требуется. - person polarblau; 02.02.2011
comment
Эй, polarblau, я внедрил код, и он работает как шарм. Сначала мне пришлось немного почистить код (хотя он все еще беспорядочный), потому что определенные части, которые нужно было перезагрузить, все еще находились в теле index.php. Однако я все еще борюсь с другой проблемой: проблемы с плагинами. Если теперь вы вводите единственную статью, панель sexybookmark работает как шарм. Это не будет с нагрузкой AJAX. То же самое для таких вещей, как Smoothgallery. Любое предложение по этому поводу? В очередной раз благодарим за помощь. Теперь страница начинает выглядеть презентабельно. - person Lara; 06.02.2011
comment
Можете ли вы показать код этой проблемы? У меня нет опыта работы ни с одним из этих плагинов, поэтому мне нужно посмотреть, как вы его реализуете. Кроме того, если вы считаете, что этот вопрос был решен, но породил новый, вы можете рассмотреть возможность закрытия этого вопроса, пометив его как решенный и открыв новый с более подробной информацией. - person polarblau; 06.02.2011
comment
Без проблем. Я оставил вам комментарий к вашему новому вопросу. Пожалуйста, используйте чекер, чтобы отметить этот вопрос решенным (учитывая, что он решен?). - person polarblau; 07.02.2011