No problem. Let us know if you have any more questions.

-Ross

On Mar 8, 2010, at 2:09 PM, Martin Dale Lyness wrote:

> Again, thank you so much for the help! The head merge feature is perfect for 
> this situation i described and my next line of though is right inline with 
> how you describe bind points!
> 
> Thanks again!
> 
> -- Martin
> 
> On Mon, Mar 8, 2010 at 12:47 PM, Ross Mellgren <[email protected]> wrote:
> For your particular example, you can use head merge as Naftoli suggests. Head 
> merge is a behavior of Lift templates where any <head> tags will be merged 
> together for the final output, so you put your meta name="description" in 
> each of the specific places, any general head stuff you want in your 
> surrounding template and they will magically get folded together at render 
> time.
> 
> For other cases, you have a couple tools at your disposal:
>  - RequestVars -- variables that are local to a particular page request. You 
> can use these inside snippets to capture and recover values during template 
> processing.
>  - Bind points. In a surrounding template you can use tags like <lift:bind 
> name="foobar" /> and then define what to put there in the surrounded template 
> using <lift:bind-at name="foobar">the content</lift:bind-at>
> 
> And there are more. Hopefully head merging will work for you in this case.
> 
> -Ross
> 
> On Mar 7, 2010, at 8:25 PM, Martin Dale Lyness wrote:
> 
>> Thank you Ross, for the very informative response! 
>> 
>> Now, I consider SEO to be closer to a designer task than a developer task so 
>> keeping the power in the design documents would be my best idea. Is there 
>> anyway to allow individual pages to define blocks that are read into the 
>> snippets and then injected into the template?
>> 
>> Here is the scenario i'm thinking of:
>> 1. A single uniform website template: default.html
>> 2. Several HTML files: index.html, product_list.html, product_overview.html
>> 3. Each of these HTML files containing <lift:xxx> tags referencing snippets.
>> 
>> What i would want is for index.html, product_list.html, and 
>> product_overview.html to all use default.html and various Snippet classes. 
>> Now for SEO i would want the meta tags in the header of default.html to be 
>> customized to index.html, product_list.html, and product_overview.html; 
>> furthermore, product_list and product_overview are dynamic pages so they 
>> would need further customization based on what the snippets are returning.
>> 
>> Essentially, i would want tags something like:
>> <lift:meta_desc>This site is totally awesome, better than all our 
>> competitors</lift:meta_desc>   in index.html
>> <lift:meta_desc>Look at all these products in 
>> %%category_name%%</lift:meta_desc>            in product_list.html
>> <lift:meta_desc>%product_name% - %product_description%</lift:meta_desc>      
>>                    in product_overview.html
>> 
>> The conceptual road block for me is coming from the controller first pattern 
>> used in frameworks like Rails. In lift snippets are not really the same 
>> conceptually. If i use the second proposed method (i.e. 
>> <lift:HelloWorld.hello> wrapping the entire template) i would have a battle 
>> between snippets used by each page. For example, perhaps i have a product 
>> overview snippet that sets the meta one way and a login snippet that sets it 
>> another way (intended for when show standalone in a login.html).
>> 
>> The first solution with using a <lift:HelloWorld.funcName /> to inject a 
>> snippet at a meta location fits better because it would allow me to create a 
>> generic function that would attempt to create the keyword and description 
>> data based on whatever global information is made available to snippets by 
>> lift (i.e. Request Parameters?). My only problem with using this option is 
>> it puts all of the text on the developer side forcing the dev team to update 
>> descriptions and keywords where really the designers should be doing this.
>> 
>> Does anyone have a suggestion on how to put the power in the hands of the 
>> designers in this type of situation?
>> 
>> -- Martin
>> 
>> On Sun, Mar 7, 2010 at 6:17 PM, Ross Mellgren <[email protected]> wrote:
>> To be parsed by the bind, it must be enclosed by 
>> <lift:HelloWorld.hello>...</lift:HelloWorld.hello>
>> 
>> There is relatively little magic -- Lift goes through your template looking 
>> for lift: prefixed tags. For those tags, it will look up a snippet class by 
>> using the part before the period (HelloWorld, in the above example) and then 
>> look for a method on that snippet class mentioned after the period (hello in 
>> the example). If there is no period, the method is assumed to be called 
>> "render".
>> 
>> Once that method is found, the method is called with the contents of the 
>> lift: tag, and the result of the method call is spliced into the XML to 
>> replace the lift: tag.
>> 
>> bind is a function that does something kind of similar to overall template 
>> processing, except you supply some prefix other than lift: (b: in the 
>> example) and a limited set of things after the colon that are valid (time 
>> and meta_desc in the example)
>> 
>> So, you might want something like this instead:
>> 
>> <meta name="description"><lift:HelloWorld.meta_desc /></meta>
>> 
>> class HelloWorld {
>>    ....
>>    def meta_desc(ns: NodeSeq): NodeSeq = Text("test desc")
>>    ....
>> }
>> 
>> Which will result in this XHTML:
>> 
>> <meta name="description">test desc</meta>
>> 
>> Or, if you want to keep it in the hello method, you'd then have to move the 
>> <lift:HelloWorld.hello> to the outside of the template:
>> 
>> <lift:HelloWorld.hello>
>>   ...
>>   <head>
>>        <meta name="description"><b:meta:desc /></meta>
>>    </head>
>>    ...
>>    <b:time />
>> </lift:HelloWorld.hello>
>> 
>> Hope that helps,
>> -Ross
>> 
>> 
>> On Mar 7, 2010, at 4:38 AM, Martin wrote:
>> 
>> > How would one go about having dynamic description and keyword meta
>> > tags in a template? Here is what i've tried:
>> >
>> > default.html
>> > <meta name="description"><b:meta_desc /></meta>
>> >
>> > HelloWorld.scala
>> > Helpers.bind("b", in, "time" -> date.map(d => Text(d.toString)),
>> > "meta_desc" -> "test desc")
>> >
>> > I'm using a basic archetype build of 2.0-M3 and it produces an error:
>> >
>> > This page contains the following errors:
>> >
>> > error on line 6 at column 28: Namespace prefix b on meta_desc is not
>> > defined
>> > Below is a rendering of the page up to the first error.
>> >
>> >
>> > It appears to me that the template is not parsed by the Helpers.bind,
>> > is this correct?
>> >
>> > --
>> > You received this message because you are subscribed to the Google Groups 
>> > "Lift" group.
>> > To post to this group, send email to [email protected].
>> > To unsubscribe from this group, send email to 
>> > [email protected].
>> > For more options, visit this group at 
>> > http://groups.google.com/group/liftweb?hl=en.
>> >
>> 
>> --
>> You received this message because you are subscribed to the Google Groups 
>> "Lift" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to 
>> [email protected].
>> For more options, visit this group at 
>> http://groups.google.com/group/liftweb?hl=en.
>> 
>> 
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Lift" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to 
>> [email protected].
>> For more options, visit this group at 
>> http://groups.google.com/group/liftweb?hl=en.
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Lift" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/liftweb?hl=en.
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Lift" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/liftweb?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en.

Reply via email to