New issue 55 by micah.stetson: Section names not looked up properly
http://code.google.com/p/json-template/issues/detail?id=55
Given this data: {"a":{"b":{"c":1}},"d":2}
Try processing Template 1:
{.section a.b}{c}{.end}
Or Template 2:
{.section a}{.section d}{@}{.end}{.end}
I expect template 1 to output "1" and template 2 to output "2". Instead,
template 1 yields "EXCEPTION: UndefinedVariable: c is not defined", and
template 2 yields "null".
I'm using sroussey's PHP version of JSON Template pulled this evening from
his repo here:
https://sroussey-json-template.googlecode.com/hg/
But I think the problem affects more than the PHP version, it's at least
present in the python version as well.
This diff against sroussey-json-template fixes the PHP version:
diff -r b9d923fb113e php/jsontemplate.php
--- a/php/jsontemplate.php Mon Oct 12 23:49:51 2009 -0700
+++ b/php/jsontemplate.php Thu Mar 04 22:20:02 2010 -0800
@@ -372,24 +372,10 @@
function PushSection($name)
{
- $end = end($this->stack);
- $new_context=null;
- if(is_array($end)){
- if(isset($end[$name])){
- $new_context = $end[$name];
- }
- }elseif(is_object($end)){
- // since json_decode returns StdClass
- // check if scope is an object
- if(property_exists($end,$name)){
- $new_context = $end->$name;
- } else if (method_exists($end,$getter="get$name")){
- $new_context = $end->$getter();
- } else if (method_exists($end,'__get')){
- try {
- $new_context = $end->$name;
- } catch (exception $e){}
- }
+ try {
+ $new_context = $this->Lookup($name);
+ } catch(JsonTemplateUndefinedVariable $e) {
+ $new_context = null;
}
$this->name_stack[] = $name;
$this->stack[] = $new_context;
@@ -653,7 +639,7 @@
class JsonTemplateModule
{
- public $section_re = '/^(?:(repeated)\s+)?(section)\s+(@|[A-Za-z0-
9_-]+)(?:\b(.*))?$/';
+ public $section_re = '/^(?:(repeated)\s+)?(section)\s+(@|[A-Za-z0-
9_-]+(\.[A-Za-z0-9_-]+)*)(?:\b(.*))?$/';
public $if_re = '/^if\s+(@|[A-Za-z0-9_-]+)(\?)?(?:\b(.*?))?\s*$/';
public $option_re = '/^([a-zA-Z\-]+):\s*(.*)/';
public $option_names = array('meta','format-char','default-formatter');
--
You received this message because you are listed in the owner
or CC fields of this issue, or because you starred this issue.
You may adjust your issue notification preferences at:
http://code.google.com/hosting/settings
Comment #1 on issue 55 by sroussey: Section names not looked up properly
http://code.google.com/p/json-template/issues/detail?id=55
I haven't contributed back the changes I've made recently. I think a fix
for this is
one of them (and it is elsewhere in the code). I'll get on this next week.
Similar problem with javascript ?
datas = '{ "items":[ { "name": "item1" }, { "name": "item2" } ],
"show": "true" }'
template = "{.section items}{.section show} SHOW {.or} DON'T SHOW
{.end}{.or} NO ITEMS {.end}"
result = "DON'T SHOW"
thanks
On 5 mar, 21:40, json-templ...@googlecode.com wrote:
> Updates:
> Owner: sroussey
>
> Comment #1 on issue 55 by sroussey: Section names not looked up properlyhttp://code.google.com/p/json-template/issues/detail?id=55
We have similar problem - even with single section - if the section is
not null, nothing appears, if it is null, it correctly executes
{.or}
it's a serious bug - tried to look at source but couldn't see fix
right away - we really need a fix or workaround so would appreciate
any help. thks.
Comment #2 on issue 55 by sroussey: Section names not looked up properly
http://code.google.com/p/json-template/issues/detail?id=55
I'm not on my normal PC, so I don't have the test harness setup, so I
pushed a change
to the sroussey-json-template repo. There were many logic errors,
particularly with
scopes. I wish I had update the repo as I fixed them, but instead they are
all in one
big change. I'm checking on the JS version that I use, and will update that
as well if
warranted.
data= { "items":[ { "name": "item1" }, { "name": "item2" } ], "show":
"true" };
template = "{.section items}{.section show} SHOW {.or} DON'T SHOW
{.end}{.or} NO ITEMS {.end}"
t=jsontemplate.Template(template)
t.expand(data)
I get the result:
" SHOW "
Which json-template.js are you using?
-steve--
On Mar 24, 7:48 pm, Miles <miles.to...@gmail.com> wrote:
json-template - we don't see a version listed anywhere ! not in docs,
not in source ! we did download it about 2 wks ago but don't see our
original clone download date
Steven Roussey
Network54 Corp.
> You received this message because you are subscribed to the Google Groups
> "JSON Template" group.
> To post to this group, send email to json-t...@googlegroups.com.
> To unsubscribe from this group, send email to
> json-templat...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/json-template?hl=en.
>
>
we cloned it from github which of course has a commit id but once on our
system there is no version info with the source code or are we missing
something. Anyway it was downloaded about March 10.
What is the difference with your version ?
thanks
Phil
On 26 mar, 20:19, Steven Roussey <srous...@gmail.com> wrote:
> Where did you download json-template from, then?
>
> Steven Roussey
> Network54 Corp.
>
I believe this issue affects more than just the PHP and Python, it seams to
be present as well I believe.
While using JSON-Template I've had issues with higher level names not being
looked up properly in the same way described. One time I rewrote the logic
of a template in a somewhat unintuitive way to get around it. Now I appear
to have run into another one which will be more trouble. I may have to
switch template systems.