views:

38

answers:

2

I am developing an iPhone application and I use HTML to display formatted text.

I often display the same webpage, but with a different content. I would like to use a template HTML file, and then fill it with my diffent values.

I wonder if ObjectiveC has a template system similar to ERB in Ruby.

That would allow to do things like

Template:

<HTML>
  <HEAD>
  </HEAD>
  <BODY>
    <H1>{{{title}}}</H1>
    <P>{{{content}}}</P>
  </BODY>
</HTML>

ObjectiveC (or what it may be in an ideal world)

Template* template = [[Template alloc] initWithFile:@"my_template.tpl"];
[template fillMarker:@"title" withContent:@"My Title"];
[template fillMarker:@"content" withContent:@"My text here"];
[template process];
NSString* result = [template result];
[template release];

And the result string would contain:

<HTML>
  <HEAD>
  </HEAD>
  <BODY>
    <H1>My Title</H1>
    <P>My text here</P>
  </BODY>
</HTML>

The above example could be achieved with some text replacement, but that would be a pain to maintain. I would also need something like loops inside templates. For instance if I have multiple items to display, i would like to generate multiple divs.

Thanks for reading :)

+3  A: 

Have you considered using as template:

<HTML>
  <HEAD>
  </HEAD>
  <BODY>
    <H1>%@</H1>
    <P>%@</P>
  </BODY>
</HTML>

And then:

// just to get file name right
NSString* fn = 
    [NSString stringWithFormat:"%@/my_template.tpl", 
              [[ NSBundle mainBundle ] resourcePath ]];
// template
NSString* template = 
    [NSString stringWithContentsOfFile:@"my_template.tpl" 
              encoding:NSUTF8StringEncoding];
// result
NSString* result = 
    [NSString stringWithFormat:template, 
              @"MyTitle", 
              @"MyText"];

I think it's pretty much what you want.

Of course you'll have to add your template files as resources in the project.

Pablo Santa Cruz
Ho, didn't even thought of using stringWithFormat. That sound good, I'll create a little wrapper around it to create a minimal template system. Thanks!
Aurélien Vallée
Ha, 25 minutes without a reply and then two of the same idea at the same time.
Chuck
+1  A: 

No, Objective-C has no built-in template system. Generally for simple uses you'd just use textual replacement (possibly via stringWithFormat:) and for something more advanced you'd choose a full-fledged template system that suits your needs.

Chuck
Good idea! Thank you
Aurélien Vallée