|
(see below for a list of theme changes in
recent Geeklog versions)
Creating a Theme for Geeklog
Creating a theme for Geeklog is easy and quite fast. If you can
manipulate HTML files then you can create a theme! There's no need to learn
PHP.
Creating a theme
First, copy an existing theme that is most similar to what you want to
implement (if one exists). If what you will do is radically different (and
we hope so!) then copying any one will do. Copy the existing theme to the
name you want your theme to have (please, no spaces in the theme name):
cp -R /path/to/geeklog/public_html/layout/Yahoo /path/to/geeklog/public_html/layout/My_Theme_Name_No_Spaces
Change into your new theme directory:
cd /path/to/geeklog/public_html/layout/My_Theme_Name_No_Spaces
Now edit the templates to suit your needs. Keep in mind that templates,
generally are partial HTML files. The directory you just created holds ALL
templates Geeklog needs but you will only need to modify a small few to
make a huge impact on the look.
In particular these are the templates you will undoubtedly want to
change:
- header.thtml
- footer.thtml
- blockheader.thtml
- blockfooter.thtml
- storybody.thtml
- storybodytext.thtml
- featuredstorybody.thtml
- featuredstorybodytext.thtml
- archivestorybody.thtml
- archivestorybodytext.thtml
- style.css
When rendering a theme, Geeklog starts with header.thtml which
builds the site's header and then goes on to include the left column of blocks
(look for the variable {left_blocks} and the leftblocks.thtml file).
The middle part of a site consists of the stories which are built using the
storytext.thtml and storybodytext.thtml (for normal stories)
and featuredstorytext.thtml and featuredstorybodytext.thtml
(for featured stories) template files. The footer.thtml file then
builds the right column of blocks (variable {right_blocks}, file
right_blocks.thtml) and the site's footer. Blocks themselves consist
of the blockheader.thtml and blockfooter.thtml files.
The above only describes how Geeklog's main page and stories are rendered.
More templates exist for the various editors and lists you will see in Geeklog,
as well as for the calendar and almost every other part of Geeklog.
There is currently no complete list available that explains which template
file is used for which part of Geeklog. However, in most cases the use should
be obvious when you have a look at the file and directory names in your theme's
layout directory. If you're unsure which template file is used to render a
certain part of Geeklog, have a look at the URL. You will notice the name of
a PHP file there, e.g. the users.php file when you view a user's
profile. Open that file and search for '.thtml'. For the profile
you will find these lines (in function userprofile()):
$user_templates = new Template ($_CONF['path_layout'] . 'users');
$user_templates->set_file (array ('profile'=>'profile.thtml', 'row'=>'commentrow.thtml', 'strow'=>'storyrow.thtml'));
You don't need to understand PHP code to see that this uses the template
files profile.thtml, commentrow.thtml, and
storyrow.thtml. The first line also indicates that these are taken
from the users directory within the theme's layout directory.
An incomplete list of variables that can be
used in templates files is also included.
After you have edited your themes, you are now ready to test it out.
Simply go to http://mygeeklogsite/usersettings.php?mode=preferences - in the
theme drop-down select your newly created theme (note the name of your theme is
the same name as the directory for your theme).
Finally, you may want to update the logo and other images in your
theme's images directory.
For the template system we are using PHPLib's template class (http://phplib.sourceforge.net/).
Read their documentation and, optionally, look at
/path/to/geeklog/system/classes/template.class.php to see how it is
implemented. Even with this knowledge it may not be clear which templates
are used in conjunction with one another (i.e. storybody.thtml and
storybodytext.thtml together make up the complete format of a
single
story). If you have questions join our mailing list at http://lists.geeklog.net/listinfo/geeklog-users
or check us out in IRC at irc.freenode.net in #geeklog.
Themes and WYSIWYG editors:
The template files used by Geeklog are not complete HTML files - they contain
only parts of the HTML that Geeklog puts together to build a proper HTML
document. This, however, seems to confuse some WYSIWYG HTML editors and some of
them tend to add the HTML which they think is missing from the file, thus
making it unusable for Geeklog.
We suggest you use a simple text editor to edit your themes.
PHP in themes:
You can use PHP in the header of a theme, i.e. in the
header.thtml file. If you want to use custom PHP functions, you can
put them in the file functions.php within your themes directory.
Different look for left and right blocks:
You can give the blocks on the left and right a different look. See
this story on the Geeklog homepage for details.
Polls:
To use multi-colored bars in the graphical display of poll results, you can use
the {answer_counter} and {answer_odd} variables in
the pollbooth/pollvotes_bar.thtml template file.
{answer_counter} will be replaced with a running number for each
answer, hence bar{answer_counter}.gif would result in
bar1.gif, bar2.gif, etc. Giving each of those GIFs a different
color would give you a different color for each answer.
{answer_odd} will alternate between 0 and 1 for every answer, hence
bar{answer_odd}.gif will result in bar0.gif for the first,
third, fifth, etc. answer and bar1.gif for the second, fourth, etc.
answer.
Left blocks in the right column:
$_CONF['left_blocks_in_footer'] (in config.php) is a
rather curious option. It makes the {left_blocks} variable
available in the site's footer (i.e. footer.thtml) while at the same
time disabling it in the header (header.thtml).
The idea is that this can be used for two-column layouts (one column for the
blocks and one column for the content) but when you want to have the blocks
on the right side. Simply moving all blocks to the right will not work as
expected, as you'd end up with no blocks at all on those pages that
normally only display the left blocks (e.g. article.php or the
admin pages). Setting $_CONF['left_blocks_in_footer'] = 1 will
fix this, so that the blocks, while internally still treated as left
blocks, will actually be displayed on the right.
The theme's header.thtml, footer.thtml, and
leftblocks.thtml will probably need some adjustments. It is also
recommended to leave the $_CONF variable unchanged in
config.php and overwrite it in the theme's functions.php
instead. That way, you can even leave your users a choice between, for example,
a "normal" theme and one with the blocks on the right.
As usual, any missing new theme files can simply be copied over from the
default theme (Professional) that ships with Geeklog.
Admin templates
Geeklog 1.4.0 comes with revamped Admin sections which required a lot of
theme changes. We therefore suggest that you simply replace the entire
admin directory of your theme with the admin directory
from Geeklog's default theme (Professional) as it ships with Geeklog 1.4.0
and apply any modfications you may have made to your Admin templates again
afterwards.
Note: The new icons for "Command and Control"
(moderation.php) in the Professional theme use a white background.
For themes with a dark (or other non-white) background, you can download these
icons as PNGs with alpha transparency (note that Internet Explorer can not
display images with alpha transparency unless you include a JavaScript "hack" into your theme, so you
may want to convert those icons to normal transparency or simply set the
background to that of your theme).
Advanced editor
To use the included advanced editor (FCKeditor) you will need the following
new template files:
- comment/commentform_advanced.thtml (for comments)
- submit/submitstory_advanced.thtml (for story submissions)
- admin/story/storyeditor_advanced.thtml (Admin's story editor)
- staticpages/templates/admin/editor_advanced.thtml (for the Static
Pages editor, located in /path/to/geeklog/plugins)
- advanced_editor_header.thtml (included by all of the above)
You also have to add {advanced_editor} to the <head> section of your theme's header.thtml file.
Other changes
- The comment templates commentbar.thtml and thread.thtml
have changed due to changes in the comment handling.
- New directories trackback and admin/trackback containing
several new template files have been added for the trackback support.
- New variables
{send_trackback_link},
{send_trackback_url}, and
{lang_send_trackback_text} are available in the story and
article template files. They provide a complete link as well as the URL and
link text allowing you to send a trackback comment for the current
story.
- The links and admin/link directories have been
removed. Links are now a plugin and the plugin's templates can be found in
/path/to/geeklog/plugins/links/templates.
- The pollbooth and admin/poll directories have been
removed. Polls are now a plugin and the plugin's templates can be found in
/path/to/geeklog/plugins/polls/templates.
- The preferences/profile.thtml template now has additional fields
for the password change (old password, confirmation field for the new
password).
- The search form, search/searchform.thtml has a new option for the
number of search results per page, while the hard-coded option to search
for links has been removed (since Links are in plugin now, it will show up
as part of the
{plugin_types} option).
- An additional variable,
{services}, has to be added to the
loginform.thtml template file if you plan to allow users to log in
to your site using remote authentication.
- If you plan to enable Trackbacks on your site, you may want to add links to
a story's trackbacks section to your story template files, e.g.
{start_trackbacks_anchortag}{trackbacks_with_count}{end_trackbacks_anchortag}. See the Professional theme's story template files for
examples.
- For the site statistics, the file stats/sitestatistics.thtml has
changed (entries for the links and poll have been removed and a new entry
for the number of active users has been added). There is also a new file,
stats/singlesummary.thtml, that is used for plugin entries.
- The navbar directory is now part of a Geeklog theme (previously
used by some plugins, e.g. the Forum plugin). It contains two files,
menuitem.thtml and navbar.thtml, as well as two images,
button.gif and button_over.gif.
There are no mandatory theme changes in Geeklog 1.3.11, so themes made for Geeklog 1.3.10 will work just fine without any modifications.
A few minor additions / new options have been introduced:
- A new variable,
{camera_icon}, can now be used in the story
and comment template files to display the small camera icon (the same as in
the Who's Online block) to link to the author's user profile (only if they
uploaded a userphoto).
- The
{layout_url} variable is now available in the templates
for the story, link, and event submission forms.
- Also in the submission forms, a variable
{separator} is now
available in addition to the misspelled {seperator}
variable.
- A new variable,
{calendar_mode}, can be used in the
calendar/events.thtml template file to ensure that the "add event"
link will take the user to the proper event submission form for either the
site calendar or the personal calendar.
General note: To upgrade your custom theme for use with Geeklog 1.3.10, you can simply copy over any new template files from the Geeklog default theme.
The biggest change in Geeklog 1.3.10 is that we now ship it with only one
default theme (the Professional theme, kindly provided by Victor B. Gonzalez)
and that the previously included themes are now available as a separate
download.
Admin templates
Most themes don't change the template files in the theme's admin
directory, so you can often save yourself a bit of work by simply replacing
the entire admin directory with the one from the Geeklog 1.3.10
distribution.
- The story editor, admin/story/storyeditor.thtml includes new
options for the story archiving and for editable story IDs. It is
recommended to make a copy of this file and re-apply any changes you may
have made to your copy again afterwards!
- The list of polls, admin/poll/polllist.thtml now supports
paging, i.e. uses the {google_paging} variable.
- The list of events uses paging and a row number now (files affected:
admin/event/eventlist.thtml and
admin/event/listitem.thtml).
- The plugin editor, admin/plugins/editor.thml, now displays 2
version numbers for the plugin: The installed version and the (possibly
differing) version of the actual code. In the latter case, it will also
display an update button.
The list of plugins, admin/plugins/pluginlist.thtml and
admin/plugins/listitem.thtml, also displays the 2 version numbers
and now supports paging when more than 25 plugins are installed.
- The topic editor, admin/topic/topiceditor.thtml, contained a
hard-coded "10" for the default number of stories per pages. The new
variable {default_limit} provides the actual default value now.
- admin/mail/mailform.thtml has been changed to look slightly less
ugly ...
Other templates
- Added two new templates for the new story archive feature. This allows you
to theme olderstories differently. By default Geeklog 1.3.10 ships with
these template files not themed and the same as a standard story. The new
template files are
- archivestorytext.thtml
- archivestorybodytext.thtml
- Due to various changes in the comment engine, it is recommended that you
copy over all the comment template files from the comment directory
(comment/reportcomment.thtml is actually a new file).
- In calendar/dayview/dayview.thtml, i.e. in the calendar's day
view, the hard-coded am/pm times have been replaced by variables of the
form {xx_hour} (where 'xx' is 0-23).
- In the event details template, i.e. in calendar/eventdetails.thtml,
the event type and an edit icon were added (this change was only made in
Geeklog 1.3.10rc3).
- A "location" field was added in the user's profile: Added {lang_location}
and {user_location} in users/profile.thtml and {lang_location},
{lang_location_text}, and {location_value} in
preferences/profile.thtml.
Optional changes
The following is a list of optional changes (mostly new variables that are
now available). This information is mostly of interest for those who want to
develop their own themes.
- {article_url}, i.e. the full URL to an article, is now also available in
article/printable.thtml.
- In links/linkdetails.thtml the new variable {link_actual_url} now
contains the actual link URL (instead of a link to Geeklog's
portal.php).
- The following variables are now available in calendar/eventdetails.thtml:
{event_state_name} (full name of the state), {event_state_only} and
{event_state_name_only} (abbreviated and full state name without the comma),
{event_edit} (link to edit the event, if allowed for the current user),
{edit_icon} (same, but with the edit icon instead of a text link),
{lang_event_type} and {event_type} for the event type
- The topic image is now available through the {topic_image} variable in
topicoption.thtml and topicoption_off.thtml
- Several class names have been introduced so that the various lists that
Geeklog uses can now be styled individually: list-feed, list-new-comments,
list-new-links, list-new-plugins, list-older-stories, list-personal-events,
list-site-events, list-story-options, list-whats-related (the names should
be self-explanatory).
Use {list_class_name} to get the actual class name, and {list_class} to get
class="classname".
- Several class names have been introduced so that the 2 small calendars
in the calendar's month view can be styled: .smallcal, .smallcal-headline,
.smallcal-week-even, .smallcal-week-odd, .smallcal-week-empty,
.smallcal-day-even, .smallcal-day-odd, and .smallcal-day-empty
- In header.thtml, you can now use the new variable
{allowed_menu_elements} as an alternative to using
{menu_elements}. The new variable takes the
$_CONF['XXXloginrequired'] settings into account, i.e.
it will only list those entries that the current user has access to.
- The admin/syndication directory, containing
feededitor.thtml, listfeeds.thtml,
listitem.thtml, and selecttype.thtml has been added.
- Template files comment/comment.thtml and
comment/thread.thtml have been added and
comment/startcomment.thtml has been changed to implement
template-driven comments.
Please note that comment/comment.thtml was changed again
in Geeklog 1.3.9rc2.
- A
{link_edit} variable has been added to
links/linkdetails.thtml so that admins can edit links directly
from the links section.
- An "edit" icon has been added: images/edit.gif. The new variable
{edit_icon} can be used as an alternative to
{edit_link} in the story template files and in
links/linkdetails.thtml.
- In the calendar/calendar.thtml file, the "mode" parameter has been
added to the << and >> buttons, so that users stay in their
personal calendar when browsing through months.
- A new file, admin/group/groupmembers.thtml, has been added and
admin/group/listitem.thtml has been changed for the new
alternative option to add users to groups.
- A new file, admin/block/listside.thtml, has been added and
admin/block/listitem.thtml and admin/block/listblocks.thtml
have been changed for the enhanced block list.
- A
{google_paging} variable has been added to
admin/link/linklist.thtml. Also added a column number to
linklist.thtml and admin/link/listitem.thtml.
- All template files where the user can enter a URL are now using a new
variable,
{max_url_length}, instead of a hard-coded number of
characters for the max. length of the URL. Files affected:
admin/block/blockeditor.thtml,
admin/event/eventeditor.thtml,
admin/link/linkeditor.thtml,
admin/topic/topiceditor.thtml,
submit/submitevent.thtml, submit/submitlink.thtml.
- The hard-coded
has been removed from the
{welcome_msg} variable. The blank was then added to the
header.thtml of the Classic, XSilver, and Yahoo themes (the other
themes either look fine without it or didn't use {welcome_msg}
in the first place).
- An extra
table has been removed from the
users/profile.thtml file of the XSilver theme so that the
username now lines up properly with the other entries.
Theme changes in Geeklog 1.3.8 were mostly aimed at moving as much of the
hard-coded HTML into template files as possible. Other changes were made to
give theme authors better control over the layout and a small portion of changes
were done to incorporate new Geeklog features.
New template files
This is a list of the new files. You can safely copy these over from one of
the standard themes that ship with Geeklog (most of these files contain HTML
that was previously hard-coded into Geeklog).
adminoption_off.thtml
loginform.thtml
topicoption.thtml
topicoption_off.thtml
useroption_off.thtml
admin/database/listbackups.thtml
admin/database/listitem.thtml
admin/user/edituser.thtml
admin/user/plainlist.thtml
comment/commentbar.thtml
comment/startcomment.thtml
pollbooth/pollanswer.thtml
pollbooth/pollblock.thtml
pollbooth/pollcomments.thtml
pollbooth/pollresult.thtml
pollbooth/pollvotes_bar.thtml
pollbooth/pollvotes_num.thtml
preferences/boxesblock.thtml
preferences/commentblock.thtml
preferences/deleteaccount.thtml
preferences/digestblock.thtml
preferences/displayblock.thtml
preferences/displayprefs.thtml
preferences/excludeblock.thtml
preferences/language.thtml
preferences/privacyblock.thtml
preferences/profile.thtml
preferences/theme.thtml
preferences/username.thtml
preferences/userphoto.thtml
search/resultauthdatehits.thtml
search/resultrowenhanced.thtml
search/resultsummary.thtml
search/resulttitle.thtml
users/newpassword.thtml
Note: preferences and admin/database are new directores.
Changed / updated template files
These files have changed since Geeklog 1.3.7, i.e. they may contain new
variables, table columns, etc. If you haven't changed these files in your
existing theme, it is probably best to simply copy them over from one of the
themes that ship with Geeklog (with the exception of style.css and
header.thtml, see below).
style.css (see below)
header.thtml (see below)
admin/block/blockeditor.thtml
admin/block/listblocks.thtml
admin/block/listitem.thtml
admin/event/eventeditor.thtml
admin/event/eventlist.thtml
admin/event/listitem.thtml
admin/group/grouplist.thtml
admin/group/listitem.thtml
admin/story/liststories.thtml
admin/topic/listitem.thtml
admin/topic/topiceditor.thtml
admin/topic/topiclist.thtml
calendar/editpersonalevent.thtml
calendar/eventdetails.thtml
search/searchform.thtml
search/searchresults.thtml
submit/submitevent.thtml
users/getpasswordform.thtml
In style.css, four classes have been added that are used in the
new search code of Geeklog 1.3.8. Instead of copying over the entire file, you
will probably only want to copy over the code for those four classes:
searchAuth, searchDate, searchHits,
highlight.
If the header.thtml of your theme is using the
{menu_elements} variable, then you do not need to make any
changes to it. If it is not using that variable, then you will need to make one
change to it. In that case, search your header.thtml for the link
to the story submission form, i.e. something like
<a href="{site_url}/submit.php?type=story">
and change it to read
<a href="{site_url}/submit.php?type=story{current_topic}">
Removed template files
If you have a file named commentheader.thtml in your theme
directory, you can safely remove it. It isn't used at all.
Please note that all the following changes are optional. Themes
made for Geeklog 1.3.6 will work just fine with Geeklog 1.3.7 - no changes
are necessary.
New features and improvements
- Theme-based topic icons are now supported by setting $_THEME_URL
in the theme's functions.php file. The variable should point to
a directory that has the same hierarchy as Geeklog's images directory
(note that the path to topic images is stored relative to Geeklog's
public_html directory).
Example:
$_THEME_URL = $_CONF['layout_url'];
- The
$_BLOCK_TEMPLATE "hack" can now be applied to the
What's Related and Story Options blocks, as well. Use
whats_related_block and story_options_block as the block
names.
- The What's Related and Story Options blocks are now available as
separate variables using {whats_related} and
{story_options}, respectively
(the {whats_related_story_options} variable for both blocks is
still available).
- Several new variables can now be used in the story templates, e.g.
{contributedby_fullname} for the full name of a story author and
{contributedby_photo} for his/her user photo.
- When the new config variable $_CONF['showfirstasfeatured'] is set
to 1, then the first story on every page is rendered using the
template files for featured stories, even when the story is not marked as
featured.
Other changes
- The template file admin/plugins/installform.thtml has been
removed since it isn't used any more.
- Two new optional template files,
admin/plugins/newpluginlist.thtml and
admin/plugins/newlistitem.thml, have been added to support
formatting of the list of plugins which haven't been installed yet. If
these files do not exist, hard-coded HTML is used to present the list.
- The template file admin/link/listitem.thtml has been changed
so that all the links are clickable.
COM_pollResults() doesn't use the side block templates any
more when called from pollbooth.php. Therefore, you can now use
different layouts whether the poll results are displayed in a side block
or on the separate poll results and comments page.
- Removed the Normal / Archive / Refreshing drop down menus from the admin
story and poll editors of the themes that ship with Geeklog. The setting
of this dropdown isn't used in Geeklog anyway and has just confused users
in the past ... (files admin/story/storyeditor.thtml and
admin/poll/polleditor.thtml)
There have been a lot of changes in the themes for 1.3.6 to get rid of the
last pieces of hard-coded english texts so as to make localisation easier.
Most of these changes have been made in the Admin editors (admin
directory) and the calendar (calendar directory). If you created
your own theme for an earlier version of Geeklog, we recommend that you copy
over these two directories from one of the themes that come with Geeklog
(choose one that is similar to your own theme or which it was originally based
on). It seems like most Geeklog themes didn't change these files anyway, so
this shouldn't be too much of a hassle ...
Other changes
- The template file admin/mail/mailform.thtml has been added.
This form for sending emails to other users of the site was previously
hard-coded into Geeklog.
If you followed the above advice and copied over the admin
directory to your theme, you got this file already.
- Two new files menuitem_last.thtml and
menuitem_none.thtml have been added to give theme authors better
control over the items in menu bars ({menu_elements} and {plg_menu_elements}
variables in header.thtml). The template file
menuitem.thtml is now used to render the first and any following
menu items - with the exception of the last menu item, which is rendered
using menuitem_last.thtml. If there are no menu elements for a
menu bar, menuitem_none.thtml is used.
- New files have been added and the existing files have been changed for
the links section (links directory). Again, we recommend to just
copy over those files from one of the themes that ship with Geeklog.
The new files are: categoryactivecol.thtml,
categorycol.thtml, categorynavigation.thtml,
categoryrow.thtml, pagenavigation.thtml
- The user profile has been extended to include a list of the last 10
stories as well as the total numbers of stories and comments posted by that
user. Have a look at the file users/profile.thtml to see the
changes or just copy that file over from one of the themes that ship with
Geeklog. You should also copy over the file users/storyrow.thtml
which describes the block for the last 1o stories.
- The Classic theme has been updated to have an "Edit" link (for
StoryAdmins) in every story now.
Files changed: storybodytext.thtml,
featuredstorybodytext.thtml
- In the Classic and Digital Monochrome themes the "contact" link now
points to the form to send an email to the admin user instead of using a
mailto: link with the site's email address from
config.php.
CSS changes
- The underscore '_' is not a valid character in CSS. Therefore, some class names used by the Geeklog calendar have been changed to use the dash '-' instead. You may need to change your stylesheet accordingly.
Names that changed: cal-oldday, cal-today,
cal-futureday, cal-nullday, weekview-curday,
weekview-offday
- A new class named pagenav can be used to format the paged
navigation.
Please note that this change was made after the release of Geeklog
1.3.6rc1 and affects the use of the paged navigation in
admin/user/userslist.thtml and links/links.thtml: In
1.3.6rc1, the navigation was wrapped in <p> tags in those files. As
of Geeklog 1.3.6 however, the function producing the navigation will wrap
it in a <div> automatically.
Note: Theme authors are encouraged to specify a character
set in the header.thtml of their themes like this:
<meta http-equiv="Content-Type" content="text/html; charset={charset}">
Geeklog will replace the {charset} variable with the proper
character set based on the currently used language file. Also make sure that
you put the above line before the <title> tag in
the <head> section of your header.thtml file.
| |
|