2010-12-01 4 views
0

J'ai un datastore qui interroge une base de données et la sortie JSon ... quelque chose comme ceci:Passage HTML par JSON (PHP et DOJO)

$data[] = array('id' => $i, 'prod_id' => $product_id, 'link' => $link); 

Je me demande comment vous pouvez passer de nouveau un lien en utilisant la variable $ link. Si je devais ceci par exemple:

$link = "<a href=\"google.com\"> Clicky </a>"; 

Le DataGrid afficherait Clicky et non le lien html réelle ... Y at-il de toute façon de passer de nouveau html?

Répondre

0

Je suggère de passer l'URL du lien et le texte du lien séparément, puis de les reconstruire en un lien d'ancrage en JavaScript sur le côté client.

Vous pouvez également essayer d'échapper le code HTML, puis de déconnecter du côté client.

Je ne sais pas pourquoi il n'enverra pas de liens - peut-être le navigateur tente-t-il d'analyser le code HTML envoyé trop tôt?

0

Vous pouvez utiliser formatter dans la grille de dojo pour mettre en forme le code HTML affiché dans chaque cellule. Lors de la création de la grille, vous pouvez définir un formatter pour chaque colonne. Le formatter est une fonction JavaScript qui prend deux paramètres, le premier value signifie la valeur de la cellule, le second rowIndex signifie l'index de la ligne en cours. La valeur de retour de la fonction formatter correspond au contenu HTML affiché dans la cellule.

Pour votre cas, je vous suggère d'utiliser une seule colonne pour l'URL du lien et le texte d'ancrage. Vous pouvez utiliser un codage simple, comme http://www.google.com$$$Clicky, où $$$ est utilisé pour séparer ces deux champs. Le code PHP serait:

$link = "http://www.google.com$$$Clicky"; 

Ensuite, dans votre fonction formatter, vous pouvez utiliser:

function(value, rowIndex) { 
    var parts = value.split('$$$'); 
    return "<a href='" + parts[0] + "'>" + parts[1] + "</a>"; 
} 

Si vous préférez utiliser une colonne pour chaque champ, par exemple url pour l'URL et anchorText pour le texte d'ancrage. Ensuite, vous devez obtenir la valeur d'une autre colonne lors du formatage de la cellule. Supposons que la grille utilise le champ url. Alors la fonction formatter peut ressembler à ci-dessous:

function(value, rowIndex) { 
    var item = grid.getItem(rowIndex); // Get the store item by index, need the reference of the grid. 
    var anchorText = grid.store.getValue(item, 'anchorText'); 
    return "<a href='" + value + "'>" + anchorText + "</a>"; 
} 
+0

Merci pour l'explication impressionnante. J'ai fini par utiliser le escapeHTMLInData = "false", cependant .. mais gardera la fonction de formatage à l'esprit pour plus tard! :) – Paul

+0

Ah, escapeHTMLInData = 'faux', je ne le savais pas avant. Merci pour l'information. :) –