Enclosures

Podcasting is what all of the kids are doing now: basically, from what I can tell, you just have an enclosure that is part of the post, and RSS readers can automatically download them. Blogsome doesn’t really have the ability to upload non-image filetypes (other than by renaming them to have an image-like extension), and anyway file sizes are limited to 300k, but it is possible to have enclosures that are files hosted elsewhere. Anyway, I found a page detailing how to set up enclosures, but it wouldn’t work for me. It turns out there is an array of arrays, and these need to be stepped through. The code I added to display a link to the enclosure after the post is as follows:

    {custom_fields}
    {if $enclosure != ''}
        <div class="enclosures">
            {foreach from=$enclosure item=enc}
                <div class="enclosure"><b>Attached Enclosure</b><br />
                    File: <a href="{$enc.0}">{$enc.0}</a><br />
                    Length: {$enc.1} bytes<br />
                    Type: {$enc.2}<br />
                </div>
            {/foreach}
        </div>
        {assign var='enclosure' value=''} <!-- reset enclosure variable again! -->
    {/if}

The only part I haven’t got working yet is the Length and Type fields: they are both blank. I’ll work harder….

Blogsome Page Templates

(This is an extension on the previous post). One of the major drawbacks of Blogsome is the handling of Pages is not complete. You can create and manage Pages, but the display of them is sub-standard: there is no page.html template file as there is for Posts (post.html). However, I have figured out a stop-gap method of running pages through a template. I tried first to do this by adding a Custom Field, as noted in the WordPress Codex, called _wp_page_template, and setting this value to post.html. This did not work, mainly (as far as I could tell) because the value did not ‘stick’. This seems to be a known issue with WordPress 1.5.1. I was able to get enclosure Custom Fields to work (almost: they only ever appeared to be an Array). The next way I figured out how to do it was by finding a variable that has a different value when a Page is being rendered, as opposed to a Post or Index, or Category, or Archive. The variable I discovered is {$smarty.server.SCRIPT_NAME}. This appears as '/wp-inst/pages' or '/wp-inst/index.php' under Blogsome. Fantastic! My next step was to have the following code where {$content} used to be in the Main Page Template:

    {if $smarty.server.SCRIPT_NAME == '/wp-inst/pages'}
        {assign var=page value=true}
        {capture name=the_content}{$content} {/capture}
        {include file='post.html'}
    {else}
        {assign var=page value=false}
        {$content}  
    {/if}

The first line, the {if} clause, finds out if it is indeed a page. The second line assigns ‘true’ to the variable {$page}, just as a way of making it less cumbersome to test again later. The third line stores the text that would normally appear in the body of the Page into the variable {$smarty.capture.the_content}. This will be used in place of {$the_content} in the post.html template. The fourth line puts the contents of the post.html file into the HTML stream. Just to be safe, I set the value of {$page} to false before the post.html file gets called normally by the {$content} tag. Then, in the post.html template file, I added the following code:

  • Where the content needs to go: {if $page == 'true'}{$smarty.capture.the_content}{$content}{/if}{the_content} There is no {else} required here, as {the_content} has no value.
  • Where the Post Title normally is, I made it: <a href="{if $page == 'true'}{$Smarty.server.PHP_SELF}{else}{permalink_link}{/if}" rel="bookmark" title="Permanent Link: {if $page == 'true'}{single_post_title}{/if}{the_title_rss}">{if $page == 'true'}{single_post_title}{/if}{the_title}</a> Basically, this replaces {permalink_link} by the URL of the current Page. I’ll have a bit of a think about how multi-page documents work if I can get them working. It replaces the {the_title} value by {single_post_title}, which works quite nicely.
  • I also made it so that the Date information is replaced by a Non-Breaking Space – in my template this means that a nice coloured box appears where the Date normally goes: this box is too small otherwise. {if $page == 'true'}&nbsp;{/if} The date data will be empty, so this should work okay.
  • Finally, I used {if $page != 'true'} ... {/if} to remove information that was not pertinant to a Page, such as the Post time, number of comments, category and so on. I also needed to have the {edit_post_link} skipped in this manner.

I have not yet made comments work properly: I’m not sure that this can be done with this hack, but they will not appear if you just do the things I’ve shown above. If you {include file=comments.html}, you will get the Comment Closed Notification.