AJAX навигация в Wordpress - Проблем с постоянните връзки

И така, ето къде съм:

Програмирах тема на блог, която прилича на бюро с много неща върху него, плъзгащи се от потребителя, движещи се елементи и т.н. Основната част от блога е поставена в книга, чиито категории можете да разглеждате, като използвате маркери на страници, както и обръщане на страници.

За да създам на потребителя впечатлението, че той/тя всъщност използва „книга“, на първо място използвах сложна структура (отнася се най-вече до мястото на маркерите на страницата):

  1. Всяка категория използва свой собствен шаблон (category-4.php, category-5.php и т.н.)
  2. Единичният.php води до чувствителни към категории шаблони (общо 6 категории)

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

Можете да разгледате текущата страница тук и да видите как работи навигацията.

По принцип точно това исках, но все още създава проблеми:

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

  2. По някаква причина някои добавки, които трябва да се свържат с ID на публикацията (като Sexybookmarks или Flattr), не работят. Предполагам, че причината е свързана с 1. проблема.

Ето моите подходи и бих искал да ви попитам кой смятате за най-добрия да вземете (или може би да дадете малко вдъхновение за други начини за разрешаване на проблема):

  1. Карайки single.php да пита дали разглеждате вградено или идвате от външен сайт и след това води до два различни шаблона (кратък и един с цялото графично съдържание). В този случай не знам как да накарам single.php да разбере откъде идвате.

  2. Мислех да използвам AJAXed Wordpress, но не съм сигурен дали ще отговаря на нуждите ми. Също така не виждам много документация за навигационния модул.

  3. Всеки друг начин, който няма да обнови съдържанието, което вече е във временните интернет файлове.

Ще бъда много благодарен да получа предложения как да се справя с този проблем.

Най-добри пожелания, Лара


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


Отговори (1)


Добре дошли в SO. Не съм сигурен дали разбирам какво точно се опитвате да направите, но ето обичайната дилема с 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
И съжалявам, че станах твърде дълъг... но за съжаление не мога да напиша проблема по-кратък от това, затова се опитах да го компенсирам чрез структуриране ;) Имате ли представа какъв е проблемът с добавките, които се опитват да уловят ID на публикацията? - 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-bar работи като чар. Няма да стане с натоварването на AJAX. Същото за неща като Smoothgallery. Някакво предложение за това? Благодаря отново за помощта. Сега страницата започва да бъде представителна. - person Lara; 06.02.2011
comment
Можете ли да покажете някакъв код за този проблем? Нямам опит с нито един от тези плъгини, така че трябва да видя как го прилагате. Освен това — ако смятате, че този въпрос е бил разрешен, но е създал нов, може да помислите дали да затворите този, като го маркирате като разрешен и отворите нов с повече подробности. - person polarblau; 06.02.2011
comment
Няма проблем. Оставих ви коментар за новия ви въпрос. Моля, използвайте отметката за отметка, за да маркирате този въпрос като разрешен (предвид, че е разрешен?). - person polarblau; 07.02.2011