[pmwiki-devel] serving a part of a page by AJAX

Petko Yotov 5ko at 5ko.fr
Thu May 2 03:18:01 CDT 2013


Don't pass the $out variable in the function call, instead get it from the  
global $FmtV['$PageText'] variable.

So, have something like this:

   ...
   $HandleBrowseFmt = array('function:PrintJSON()');
   ...
   print json_encode($GLOBALS['FmtV']['$PageText']);
   # or global $FmtV; print json_encode($FmtV['$PageText']);

There is more than one way to do it.

The BlogIt and the Qnotes recipes update parts of a page via Ajax, you may  
look how they do it. Someone asked about Ajax in PmWiki before and this was  
reportedly useful:

  http://thread.gmane.org/gmane.comp.web.wiki.pmwiki.user/53499/focus=53520

Petko

Peter Bowers writes:
> I am putting together a web-site where the help is served in a jsquery-ui  
> dialog populated by AJAX.  Up until now I've coded the help in HTML and just  
> put it directly in PHP variables.  As the site matures the documentation is  
> growing rapidly and maintaining it in HTML is getting a bit onerous -- it  
> would be great if I could maintain the docs in pmwiki.
>
>
> In order to serve just the page text I've created an action handler.  I could  
> totally replace HandleBrowse() if necessary, but it feels like I should be  
> able to just set a couple configuration variables and re-use that  
> functionality.
>
> When I do this:
>
>
> ===(snip)===
> function HandleAJAXPageText($pagename, $auth = 'read')
> {
>     global $HandleBrowseFmt;
>     $HandleBrowseFmt = array('function:PrintJSON($PageText)');
>     HandleBrowse($pagename, $auth);
> }
>
> function PrintJSON($pagename, $out)
> {
>     header("Content-type: application/json");
>     print json_encode($out);
> }
> ===(snip)===
>
>
> The $PageText ends up getting replaced by the contents of the web-page and  
> then the 'function:PrintJSON(hello this is the text on the page)' no longer  
> matches the regex for a valid function and the function is never called.  I  
> end up getting a web-page that includes the PrintJSON( ... ) function call as  
> part of the text on the page served.
>
>
> (The relevant part of pmwiki code is in pmwiki.php around line 1182 - in the  
> PrintFmt() function.)
>
>
>
> I tried various ways of getting the 'function:PrintJSON(...)' to pass the  
> variable $PageText rather than the contents of it, but I'm not making any  
> progress...
>
> Any ideas?
>
>
> -Peter
>



More information about the pmwiki-devel mailing list