Edukira salto egin | Salto egin nabigazioara

Tresna pertsonalak

Eibarko peoria, San Blasa baino hobia
Hemen zaude: Hasiera / Blogak / Ingelesen hilerria / The English Cemetery

English-language version of Luistxo Fernandez's blog

Modified Coreblog released by CodeSyntax

Luistxo Fernandez 2005/04/27 11:34

Here it is: a new Coreblog development. See the demo and download the modified product, instructions and else from CodeSyntax

This modified Coreblog is in usage in a Basque blog community at Goiena with examples like Zinema , Faroa or Superbai

In those blogs, users (individual bloggers, as opposed to the website managers of need no Zope knowledge.

  • Editing and managing interfaces taken out of ZMI, and they have been localised

You cannot access the editing interfaces in the examples or in the demo, but I posted an image at this blog entry, so you can have an idea.

Other features:

  • Date is editable. You can change date & time of posting, whenever you want.
  • Comment and trackback control interfaces integrated into the general entry management view
  • A micro-CMS so the user can manage fixed content, upload files and images.
  • Template changes only through the CSS, but the CSS can be directly accessed and edited by the user. Design follows a Movable-Type 3 layout, so you can adapt any CSS layout of that kind and apply it.

A good place to get CSS's is . Check the MT3 category: the styles fit nicely. Those with images in the background require more homework, but the pure CSS's are just copy, paste, save and see.

  • All that is localised, with versions ready for English, Spanish and Basque, and the possibility to easily deploy other languages.
  • Image addition and management: pictures get embedded into posts. Just mentioned on the "previous post."

Images embedded in Coreblog entries using entry editing form

Luistxo Fernandez 2005/04/27 10:15

Images in Coreblog entries using entry editing form: Original recipe by Brady Davis and Jeffrey Hicks (from Blogplot ), now reused by CodeSyntax for its new modified Coreblog version, and republished here for documentation purposes.

See how it this feature works in our demo, or in sites related to the Blogplot crew, the inventors of it: at or at This was documented last year as well at the old Coreblog-en list, but indentation was not preserved in the archive's code, so we republish it now.

Begin Recipe

Tested with:

    COREBlog 0.53b    Photo 1.2.3    ImageMagick    Zope 2.6.2   * Python Version 2.1.3 

by CodeSyntax: We have tested it with COREBlog 1.1 and Zope 2.6.1b1


1. Backup your stuff

2. In COREBLog product folder on fileystem in import modules sections of add:

  from OFS.ObjectManager import ObjectManager 

3. Scroll down and change the class Entry definition to extend ObjectManager as follows:

  class Entry(ObjectBase, ObjectManager, Management.Tabs,Undo.UndoSupport): 

4. Scroll down and add this list item to the manage_options list:

  {'label':Images,'icon':'', 'action':manage_images, 'target': 'manage_main'}, 

5. Scroll down and add these statements near the other similar HTMLFile statements:

     security.declareProtected(ManageCOREBlog, manage_other)     manage_images = HTMLFile(dtml/manage_addImage,globals()) 

6. Scroll down and add the following methods and security statements inside the class body by CodeSyntax: BE CAREFUL WITH INDENTATION !! :

     security.declareProtected(AddCOREBlogEntries, manage_addImageScript)     def manage_addImageScript(self):         context = self         if context.REQUEST.has_key(pic1):             file = context.REQUEST['pic1']             name = context.ZopeTime().strftime(img_%b_%d_%Y_%M_%S)             context.manage_addProduct['Photo'].manage_addPhoto(name,name,file)             photo = getattr(context,name)

for property in [placement,border,display_size,zoom,'caption']: photo.manage_addProperty(property, context.REQUEST[property], string)

if context.REQUEST.has_key(deletebox): ids = context.REQUEST['deletebox'] context.manage_delObjects(ids) return ''

security.declareProtected(View, images_top) def images_top(self): """ images_top method """ photos = self.objectValues(Photo) results = '' for p in photos: placement = p.getProperty(placement) if placement.find(top)>=0: if placement.find(left)>=0: float = float: left; margin-right: 1em; margin-bottom: .5em; else: float = float: right; margin-left: 1em; margin-bottom: .5em; tag1 = p.tag(display=p.getProperty(display_size), alt=p.getProperty(caption), css_class=None, style=border: %s; %s) tag2 = tag1%(p.getProperty(border), float) zoom = p.getProperty(zoom) if zoom.find(no zoom) >= 0: tag3 = tag2 else: tag3 = '<a href="%s?display=%s">%s</a>'%(p.absolute_url(),zoom,tag2)

results = '%s%s'%(results, tag3) return results

security.declareProtected(View, images_bottom) def images_bottom(self): """ images bottom method """ photos = self.objectValues(Photo) results = '' for p in photos: placement = p.getProperty(placement) if placement.find(bottom)>=0: tag1 = p.tag(display=p.getProperty(display_size), alt=p.getProperty(caption), css_class=None, style=border: %s;) tag2 = tag1%(p.getProperty(border),) zoom = p.getProperty(zoom) if zoom.find(no zoom) >= 0: tag3 = tag2 else: tag3 = '<a href="%s?display=%s">%s</a>'%(p.absolute_url(),zoom,tag2)

results = '<div style="margin-top: 1em;">%s%s</div>'%(results, tag3) return results

security.declarePrivate(getId) def getId(self): return

7. Save.

8. Create new file in Filesystem Products/COREBLog/dtml. Save the file as manageAddImage.dtml Copy and paste the source code found in the APPENDIX after step 11.

9. Restart Zope or Refresh the COREBlog product from the Zope Management Interface (ZMI)

10. From ZMI customize "entry_body" COREBlog skin. Insert dtml statements <dtml-var images_top> and <dtml-var images_bottom> around your body. Below I show a clip of code to show where I inserted my statements.

by CodeSyntax: this change is already made in the entry_body DTML Method in the ZEXP:

  <p>  <dtml-var images_top>  <dtml-if "format == 0">  <dtml-var body newline_to_br>  <dtml-elif "format == 1">

<dtml-var body fmt=structured-text> <dtml-elif "format == 2"> <dtml-var body> </dtml-if> <dtml-var images_bottom> </p>

11. You should be done. Enjoy.


# manageAddImage.dtml :

   <dtml-var manage_page_header>   <dtml-var manage_tabs>

<dtml-var manage_addImageScript> <p>Add and manage images</p> <form action="manage_images" method="POST" enctype="multipart/form-data"> <table cellspacing="1" cellpadding="0" border="0"> <tr>

<td class="list-header" valign="top" align="left"> <div class="form-label">

Image </div> </td> <td valign="top" align="left">

<input type="file" name="pic1"> </td> </tr> <tr> <td class="list-header" valign="top" align="left"> <div class="form-label" style="white-space: nowrap;">

Placement in entry </div> </td> <td valign="top" align="left"> <select name="placement"> <option SELECTED value="top right"> top right <option value="top left"> top left <option value="bottom"> bottom </select>

</td> </tr>

<tr> <td class="list-header" valign="top" align="left"> <div class="form-label" style="white-space: nowrap;"> Display Size </div>

</td> <td valign="top" align="left"> <select name="display_size"> <option value="tiny"> tiny (65x65) <option value="thumbnail"> thumbnail (100x100) <option SELECTED value="xsmall"> xsmall (200x200) <option value="small"> small (300x300) </select>

</td> </tr>

<tr> <td class="list-header" valign="top" align="left"> <div class="form-label" style="white-space: nowrap;"> Zoom Size </div>

</td> <td valign="top" align="left"> <select name="zoom"> <option value="no zoom"> no zoom <option SELECTED value="small"> small (300x300) <option SELECTED value="medium"> medium (500x500) <option value="large"> large (800x800) <option value="original"> original </select>

</td> </tr>

<tr> <td class="list-header" valign="top" align="left"> <div class="form-label" style="white-space: nowrap;"> Border </div>

</td> <td valign="top" align="left"> <select name="border"> <option value="0px"> 0px (No Border) <option SELECTED value="1px solid black"> 1px solid black <option value="1px solid black"> 2px solid black </select>

</td> </tr>

<tr> <td class="list-header" valign="top" align="left"> <div class="form-label" style="white-space: nowrap;"> Caption </div>

</td> <td valign="top" align="left"> <input type="text" name="caption" size="40"> </td> </tr>


<td> &nbsp; </td> <td> <input type="submit" name="AddImage" value="Add Image"> </td> </tr>

</table> </form> <dtml-let entry_id=id> <dtml-in "objectValues(Photo)"> <dtml-let photo=sequence-item> <dtml-if sequence-start>

<form action="manage_images" method="POST"> <table cellpadding="0" cellspacing="0" width="100%"> <tr class="list-header"> <td align="left">Del</td> <td class="list-item" align="left"><div class="list-item">Image</div></td>

<td class="list-item" align="left"><div class="list-item">Position</div></td> <td class="list-item" align="left"><div class="list-item">Display size</div></td> <td class="list-item" align="left"><div class="list-item">Zoom</div></td>

<td class="list-item" align="left"><div class="list-item">Border</div></td> <td class="list-item" align="left"><div class="list-item">Caption</div></td> </tr>


<tr class="<dtml-if sequence-even>row-hilite<dtml-else>row-normal</dtml-if>"> <td> <input type="checkbox" name="deletebox" value="<dtml-var title_or_id>">

</td> <td valign="top" align="left"> <a href="<dtml-var "photo.absolute_url()">"><dtml-var "photo.tag(display= tiny, alt=photo.getProperty(caption), css_class=None, style=margin: 2px;)"></a> </td> <td align="left"><dtml-var "photo.getProperty(placement)"></td>

<td align="left"><dtml-var "photo.getProperty(display_size)"></td> <td align="left"><dtml-var "photo.getProperty(zoom)"></td> <td align="left"><dtml-var "photo.getProperty(border)"></td> <td align="left"><dtml-var "photo.getProperty(caption)"></td>


<dtml-if sequence-end> </form> </table> &nbsp;&nbsp;&nbsp;<input type="submit" name="Delete" value="Delete">

</form> </dtml-if> </dtml-let> </dtml-in> </dtml-let> <dtml-var manage_page_footer>

Here we are, the Basque bloggers

Luistxo Fernandez 2005/04/19 11:43

Here we are, out of the closet: the Basque Bloggers. We blog in Basque, that strange language, not yet at the Bloglines interface (unlike Klingon), spoken by juist 0.6 million people. It was election day around here last sunday, april the 17th, and we met at the first Basque Blogs & Beers at Elgeta, the Espaloia cafe in this town in the mountains, just 1000 people living there.


It's nice Espaloia. Wi-fi connections, macs for users to get online, those polyspam yellow armchairs designed for The Simpsons... That big screen, alternating images from our blogs, moblog posts by e-Gor Leturia and the election results in the local Basque TVs: there's a nice local tv there also, GoiTB, translatable like Hi-TV, for High Altitude, or something like that.

We were 21 bloggers. 18 of us at the official photo, and three extras in the other.



Go to Flickr to identify ourselves: name and surname, blog and URL. The main one and this for the extra trio It's cool that flash app at Flickr to mark square captions at pictures. If you don't like Flash, there's a plug-in for Firefox to view those. Check Lickr

As for me, there I am with my beloved Bloglines t-shirt, drinking a beer.


Elgeta is cool. It's my father's birthplace. There, up in the mountains. We don't have Google Maps round here, but there's b5m and there you can see the location at different scales, from the 1:700000 map of Gipuzkoa, the Basque province where Elgeta is located (but the locals have a smooth Bizkaian dialect, not Gipuzkoan), to the ortophoto at 1:2000.





No that you have located and identified us, you can bomb us. Blogari euskaldunak gara, eta harro gaude.

Yes, I love Bloglines, and I would like it to be better

Luistxo Fernandez 2005/04/06 10:02

When Bloglines merged with Ask Jeeves, I read this post at the Jeeves bossblog. They offered 200 t-shirts; I wrote, and I got mine! It crossed the Atlantic, really, to reach the Basque Country. So, I already wear it at my office, just like Jeeves9000, Mark Fletcher himself and others do (see the video )

I hope the merger is for good. It's not the first time a search company buys something at Mark's shop. When eGroups became Yahoogroups, we could expect improvements. Yet, the experience hasn't shown that, and Mark himself has wrote about it.

Particularly, eGroups had a couple of odd features: awful search, and not very convincing i18n. Yahoo hasn't done anythong to improve searches in Yahoogroups, for reasons difficult to guess.

Now, the issue is that Bloglines itself has similar problems like those at eGroups at the time: i18n attempts haven't been very good (the Spanish interface is awful, for instance), and the searching capabalities of Bloglines are bad. Will Ask Jeeves improve the search part? They should. Regarding i18n, ummm, Ask Jeeves doesn't look focused on that... They should approach the issue with an open mind, and open practices. I would love to see that. Love to see Bloglines in Basque some day.

BTW, I am not the only one at my dotcom to wear trendy T-shirts. Here I am with the Pink Panther and Jatsu Argarate, software engineer at CodeSyntax, and bass guitar player at Kokein, a pop-rock group with a belly-dancing singer.


Luistxo works in CodeSyntax, tweets as @Luistxo and tries to manage the automated newssite Niagarank. This Cemetery is part of a distributed multilingual blog (?!). These are the Basque and Spanish versions:

Ingelesen hilerria

El cementerio de los ingleses


Subscribe to the Cemetery: RSS entries / RSS comments | By email.

My cultural consumption in English: 2012/13 | Television | Movies | Books

Creative Commons by-sa