Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][JavaScript][PHP] zastępowanie fragmentu strony onload - cloaking?
Forum PHP.pl > Forum > Przedszkole
-Bartosz-
Witam,
korzystam z cachowania zend frameworka całych stron (frontend output). Jednak część strony jest generowana dynamicznie, dla każdego użytkownika indywidualnie. Ta dynamiczna część była doczytywana ajaxem. Pojawił się jednak problem z google botami, ponieważ nie indeksowały one doczytywanej treści.
Mam pomysł, aby przy ładowaniu strony wyświetlać jakąś domyślną treść (którą widziałby bot) i od razu, onload zastępować ją ajaxem treścią dedykowaną dla usera. Pytanie tylko, czy taka metoda nie grozi banem od google za cloaking?
eviance
siemka

1. pomysł zalatuje mi troche door-way page's (chyba tak sie to kmini), iż index strony po odczytaniu jest podmieniany, ale sam pomysł jest dość ciekawy - ciekawe jak w analizie.
2. a co bedzie jesli z czytania bedziesz miał swap code (wykonanie), a nastepnie przed podmianą wykonanie??

Luka
phpion
Jakiś czas temu stałem przed podobnym problemem. Siedzę w Kohanie, ale możesz bez problemu (jak sądzę) podobną ideę zastosować u siebie.

Helper:
  1. class frache {
  2. /**
  3. * Wystawia dynamiczną treść.
  4. *
  5. */
  6. public static function dynamic() {
  7. echo '<!-- dynamic frache '.serialize(func_get_args()).' -->'."\n";
  8. }
  9.  
  10. /**
  11. * Zwraca wyrenderowaną treść dynamiczną.
  12. *
  13. * @param string $input Treść wejściowa.
  14. * @return string Wyrenderowana dynamiczna treść.
  15. */
  16. public static function render_dynamic($input) {
  17. return preg_replace_callback('#\<\!-- dynamic frache (.*?) --\>#sm', function($data) {
  18. if (is_array($data) && isset($data[1])) {
  19. $data = @unserialize($data[1]);
  20.  
  21. if (is_array($data)) {
  22. $function = array_shift($data);
  23.  
  24. return call_user_func_array($function, $data);
  25. }
  26. }
  27.  
  28. return '';
  29. }, (string)$input);
  30. }
  31. }

W cache'owanym całym widoku nie wstawiasz wywołań funkcji, tylko frache::dynamic($callback), czyli zamiast (przykładowo):
  1. <?php echo html::widget('user', 'panel') ?>

dajesz:
  1. <?php frache::dynamic(array('html', 'widget'), 'user', 'panel') ?>

Dzięki temu w źródle strony będziesz miał "znacznik", że w to miejsce należy wstawić dynamiczną treść podmienianą tuż przed wyświetleniem danych.

W momencie wysyłania danych na ekran (HTML już masz zapisany w cache) dodajesz jeszcze podmianę callbacków:
  1. $output = frache::render_dynamic($output);
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.