Este site utiliza cookies para lhe proporcionar uma melhor experiência de utilização. Ao navegar aceita a política de cookies.
OK, ACEITO

Calling Code Sources from templates

Code Sources were originally invented as a means of inserting special content in Silva documents. For example an Author might want to embed a video in a page. By using a Code Source the Author only needs to input a few values in a form (as opposed to knowing all the html that’s required). Code Sources make the process  much Author-friendlier. The Author can concentrate on content, leaving the technical stuff to a Manager/developer. By the way, the inventor of Code Sources was Benno Luthiger from ETH Zürich.

It’s also possible to use Code Sources in templates. For instance embedding a Google Map in a contact page is useful. But one may also want the map, in a smaller format, always visible in a flanking column. That requires template work.

To use a Code Source in a template you must first define the parameters with their values, then pass them through to the Code Source. When called in this way the Code Source will use its render_to_html method and return formatted html and content.

Let’s use the example from the Code Source HowTo and call the Network Image CS from a template. Say we want the image to appear in the footer on every page.

First we define the parameters as configured in the Code Source. Required parameters must be defined, while the others are – just like in a document – optional. Here’s sample code:

<div style="float:right"
  tal:define="
    image_location string:http://opensource.org/trademarks/osi-certified/web/osi-certified-120x100.png;
    image_width string:120;
    image_height string:100;
    alt_text string:OSI Certified;
    link_url string:http://opensource.org/;
    link_tooltip string:Read a definition of open source software;
">
  <img tal:replace="structure python:context.cs_network_image.netimage(
    image_location=image_location,
    image_width=image_width,
    image_height=image_height,
    alt_text=alt_text,
    link_url=link_url,
    link_tooltip=link_tooltip,
  )" />
</div> 

Since the enclosing div has alignment we’ve skipped the alignment_selector parameter, but all the others are defined, including the required image_location, image_width and image_height.

Then we call the Code Source and pass the parameters through. In fact we call the renderer within the Code Source, which may be a script or page template, like so:

structure python:context.cs_network_image.netimage()

Since we’re getting html back, we need structure. The call will find the Code Source higher in the content tree using acquisition. The renderer is named ‘netimage’.

Within the parentheses we pass the parameters, using the same names to keep things straight (listing each one on its own line following our coding guidelines for TAL). You can skip a parameter that’s defined above, but don’t pass a parameter that isn’t defined. If the Code Source has no parameters you can just use a TAL path expression.

When everything is correctly defined and passed, the network image will show up in our page, complete with a link and tooltip.

This should work with any version of Silva and External Sources.