Question

Voici maintenant ma situation :Je suis en train de créer un CMS.Lorsque l'on clique sur les liens, j'aimerais que les pages se chargent dynamiquement à l'aide d'Ajax.Le problème dans les liens !

La seule façon de modifier l'adresse dans la barre d'adresse en temps réel est d'utiliser des balises d'ancrage.Mais PHP n'obtient pas les balises d'ancrage, je ne peux donc pas charger le contenu de la page lors du chargement du site à l'aide de PHP.Et si je devais charger les pages à l'aide d'une chaîne de requête, la chaîne de requête ne pourrait pas être mise à jour dans la barre d'adresse en cliquant sur un lien, car cela rechargerait la page.

Je suppose que Javascript pourrait vérifier l'adresse, enregistrer la balise d'ancrage dans un cookie et recharger la page, mais je préfère ne pas avoir à aller aussi loin.

Quelqu'un connaît-il une solution à ce problème ?

Était-ce utile?

La solution

Il n'y a pas si longtemps, une question similaire s'est posée et j'ai trouvé la solution suivante.

Vos URL doivent pointer vers de vraies pages afin que cela fonctionne pour les utilisateurs handicapés de js.Les gestionnaires de clics doivent gérer les requêtes ajax.Le hachage doit contenir l'URL et une partie comme &ajax pour indiquer le type de demande.

Si la demande provient d'Ajax, envoyez simplement le contenu.Si ce n'est pas le cas, placez le contenu dans l'en-tête et le pied de page pour répondre avec un site complet.

Les URL doivent fonctionner avec des liens vers des hachages générés par ajax et en les utilisant comme liens.L’idée générale est d’imiter le type de comportement que vous pouvez voir sur Facebook.

Javascript

// click handler for ajax links
function goToWithAjax(hash) {
  hash = hash.href ? hash.getAttribute("href", 2) : hash;
  ajax( hash, function( response ) {
    document.getElementById("content").innerHTML = response;
  });
  hash = ("#!/" + hash).replace("//","/");
  window.location.hash = hash;
  return false;
}

.htaccess

auto_prepend_file = "prepend.php"  
auto_append_file  = "append.php"  

ajouter un préfixe

$url   = $_SERVER['REQUEST_URI'];
$parts = explode('#!', $url);
$hash  = isset($parts[1]) ? $parts[1] : false;

// redirect if there is a hash part
if ($hash) {
  header("Location: $hash");
}

// find out if it's an ajax request
$ajax = strstr($url, "&ajax");

// we need header if it's not ajax
if (!$ajax) {
  get_header();
}

ajouter

// we need footer if it's not ajax
if (!$ajax) {
  get_footer();
}

get_header()

function get_header() {

echo <<< END
<html>
<head></head>
<body>
<div id="page">
  <div id="header">
    <div id="logo"></div>
    <ul id="nav">menu...</ul>
  </div>
  <div id="content">
END;

}

get_footer()

function get_footer() {

echo <<< END
  </div> <!-- end of #content --->
  <div id="footer">(c) me</footer>
</div> <!-- end of #page --->
</body>
</html>
END;

}

Autres conseils

I can see why you might want to load parts of the page with ajax. A whole page is rather pointless though.

A jQuery solution might be something like:

$(a.ajax_link).click(function(){
  var url = $(this).attr('href');
  $.ajax({
    url:url,
    success:function(data) {
      $('body').html(data);
      return false;
    }
  });
});

I have in no way tested that, but it should still work without javascript enabled.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top