Friday, August 29th, 2008 (updated 2 Mar ’10)

Adam Khan | Brighton, England

How Subtraction.com was converted to EE

 
B

eing a blog, Khoi Vinh’s renowned Subtraction.com isn’t as complex a web site as one for an entire organization. But being a standard-bearer of design excellence, everything has to be just so. As Khoi switched to EllisLab’s ExpressionEngine web publishing system, some of the details he wanted fell through the cracks of the software’s out-the-box functionality. This article explains how those details were implemented and how the site was architected in EE.

  • Sector
  • Service

For the conversion of the renowned Subtraction.com web site to the renowned ExpressionEngine web publishing system, the key architectural insight was that all except one of the major screens are either single-entry or multi-entry. The various multi-entry screens are therefore powered by just one multi-entry template and the single-entry screens by just one single-entry template, reducing the number of templates required, making the site easier to maintain.

The Index Template

In turn, both the single- and the various multi-entry screens spark from a single template, /site/index:

{embed="site/header"}

{if segment_1
=="" }
{
!-- Display multi-entry as homepage --}
{embed
="site/multi-entry" pagetype="homepage"}

{if
:elseif
 
segment_1 != "" && 
 
segment_1 != "archives" && 
 
segment_1 != "categories" && 
 
segment_1 != "about" && 
 
segment_4==""
}
{
!-- Display multi-entry as monthly --}
{if segment_1 
2000 && segment_2 && segment_2 13}
{embed
="site/multi-entry" pagetype="monthly"}
{
/if}

{if
:elseif segment_1 == "categories"}
{
!-- Display multi-entry as category --}
{embed
="site/multi-entry" pagetype="category"}

{if
:elseif segment_4}
{
!-- Display single-entry --}
{embed
="site/single-entry"}
{
/if}

{embed
="site/footer"

Here the first and last lines show that the header and footer are shunted out of the way from the get-go; any header variations among the screens are handled within the /site/header template. Into these site-wide standards is shoveled as much as possible in order to reduce the main templates.

The heart of /site/index is a conditional to test various URL structures. If for instance our URL has four segments then we’re on a single-entry page, as the site uses the blog-standard /year/month/date/dirified-title URL format for entries and no other screens have so many URL segments.

The Single-Entry Template

EE is not, despite its blogging software pedigree, designed for blog-standard URLs. Instead, its URLs use a /template-group/template/dirified-title format. Khoi was adamant however that his blog-standard URLs must stay. So this is handled in /site/single-entry:

{exp:weblog:entries weblog="subtraction|lens|elsewhere" disable="category_fields|pagination|trackbacks" year="{segment_1}" month="{segment_2}"  url_title="{segment_4}" dynamic="off" limit="1" status="not closed"}
{if member_group
=="1" || status=="open"}

<div id="posts">

<
div class="day">

 <
class="date">{entry_date format='%D %d %M'}<br /> {entry_date format='%Y'}</p>
 <
h2{if status=="Hold"} style="color: red"{/if}>{title}</h2>
 <
div class="post-info">
  <
span class="info-label">Posted</span>
  <
span class="info-data">{entry_date format='%h&#58;%i %a'}</span>
 </
div>
 <
div class="post-info">
  <
span class="info-label">Author</span>
  <
span class="info-data"><a href="{url}">{author}</a></span>
 </
div>

 
{if weblog_short_name == "subtraction"}
 
<div class="post-info">
  <
span class="info-label">Categories</span>
  <
span class="info-data">{categories backspace="1" style="linear"}<a href="{path=/}">{category_name}</a>, {/categories}</span>
 </
div>
 <
div class="body-lead">
  <
div class="info-label">Body</div>
  <
div class="first">
   
{body}
  
</div>
  
{extended}
 
</div><!-- /.body-lead -->
 <
div id="terminator">+</div>
 <
div class="clear"></div>
 
{/if}

 {if weblog_short_name 
== "elsewhere"}
 
<div class="post-info">
  <
span class="info-label">Rating</span>
  <
span class="info-data">
   <
div class="stars">
    <
a href="" class="stars-{elsewhere-rating}"><img src="{site_url}assets/1-star.gif" alt="Stars" width="14" height="14" /></a>
   </
div>
   <
div class="clear"></div>
  </
span>
 </
div>
 <
div class="body-lead">
  <
div class="info-label">Body</div>
  <
div class="first">
   
{elsewhere-body}
  
</div>
 </
div><!-- /.body-lead -->
 <
div id="terminator">+</div>
 <
div class="clear"></div>
 <
div class="post-info post-info-elsewhere">
  <
span class="info-label">Link</span>
  <
span class="info-data">
   <
div class="elsewhere-link"><a href="{elsewhere-url}">Jump to This Link</a></div>
  </
span>
 </
div>
 
{/if}

 {if weblog_short_name 
== "lens"}
 
<div class="post-info">
  <
span class="info-label">Categories</span>
  <
span class="info-data">&nbsp;
  
{categories backspace="2" style="linear"}<a href="{path=weblog/index}">{category_name}</a>, {/categories}
  
</span>
 </
div>
 <
div class="body-lead {lens-orientation}">
  
{lens-image} 
  {if lens
-caption != "" }
  {lens
-caption}
  {
/if}
  {if lens
-caption-extended != "" }
  {lens
-caption-extended}
  {
/if}
 
</div><!-- /.body-lead -->
 <
div id="terminator">+</div>
 <
div class="clear"></div>
 
{/if}

</div><!-- /.day -->

<?php
$still_allow_comments
="no";
$post_time=strval("{entry_date format='%U'}");
$current_time="{current_time}";
$comments_allowed_from $current_time 5184000;
if ( 
$post_time >= $comments_allowed_from 
{
 $still_allow_comments
="yes";
}
?>

{if allow_comments 
&& comment_total == 0}
{if
:elseif allow_comments && comment_total >= 1}
<a name="remarks"></a>
<
div id="remarks">
 <
h3>
  <
span class="notation">Remarks</span>
  
<?php if ( $still_allow_comments == "yes" ) : ?>
  {comment_total} total remarks on this post
. <a href="#add-form">Add your own remarks below.</a>
  
<?php else: ?>
  {comment_total} total remarks were added before the post was closed
.
  
<?php endif; ?>
 
</h3>
{/if}

{embed
="site/display-comments" thisentry_id="{entry_id}"}

{if member_group
=="1" || status=="open"}
</div><!-- /.remarks -->
{/if}

<?php
if ( $still_allow_comments == "yes" ) :
?>

<div class="add-remarks">

 
{exp:comment:form preview="site/comment_preview" url_title="{segment_4}"}
 
<h3>Add Remarks<a name="add-form"></a></h3>
 <
div class="guidelines">Please be nice.</div>
 
{if logged_in}
 
<div class="add-lead">
  <
label for="name">Name</label>
  <
div><input type="text" size="3" id="name" name="name" value="{name}" /><span>Your name is required.</span></div>
 </
div><!-- /.add-lead -->
 <
div class="clear"></div>

 <
div class="add-lead">
  <
label for="email">Email</label>
  <
div><input type="text" size="3" id="email" name="email" value="{email}" /><span>An email address is required.</span></div>
 </
div><!-- /.add-lead -->
 <
div class="clear"></div>

 <
div class="add-lead">
  <
label for="url">Web Site</label>
  <
input type="text" size="3" id="url" name="url" value="{url}" />
 </
div><!-- /.add-lead -->
 <
div class="clear"></div>
 
{/if}

 {if logged_out}
 
<div class="add-lead">
  <
label for="remember">Your Info</label>
  <
input type="checkbox" name="save_info" value="yes" {save_info} />
<
span>Save my personal information for next time</span>
 </
div><!-- /.add-lead -->
 <
div class="clear"></div>
 
{/if}

 
<div class="add-lead">
  <
label for="remember">Follow-up</label>
  <
input type="checkbox" name="notify_me" value="yes" {notify_me} />
<
span>Notify me of further remarks on this post</span>
  <
div class="clear"></div>
 </
div><!-- /.add-lead -->

 <
div class="add-lead">
  <
label class="your-remarks">Your Remarks</label>
  <
textarea name="comment" rows="10" cols="40" class="your-remarks">{comment}</textarea>
 </
div><!-- /.add-lead -->

 <
div class="add-last-lead">
  <
label>Submit</label>
  <
span><input type="submit" name="preview" value="Preview"  /></span>
  <
span><input type="submit" name="submit" value="Submit" /></span>
 </
div><!-- /.add-lead -->
 
{/exp:comment:form}
 
</div><!-- /.add-remarks -->

<?php endif; ?>

</div><!-- /#posts -->

{embed="site/sidebar" pagetype="article" articletype="{lens-orientation}" }

{
/if}
{
/exp:weblog:entries} 

Into the template’s sole weblog:entries tag (always a good goal for performance reasons) a few extra parameters have been added:

year="{segment_1}" month="{segment_2}" url_title="{segment_4}" dynamic="off" limit="1" 

The tag’s “dynamic” parameter switches off EE’s default method of retrieving the entry from the URL. Instead, the year is tested against the contents of segment #1, the month against segment #2 and the dirified URL against segment #4. (The date isn’t tested against segment #3 because this seems to filter out entries posted between 12:00am and 1:00am.)

The “weblog” parameter contains all three weblogs — subtraction, lens and elsewhere. Initially the template handles entries similarly regardless of their weblog, displaying the title, date and author. Then entries fork depending on their weblog.

After the “day” div are a few lines of PHP beginning with

still_allow_comments="no"

Khoi wants each post’s comments to close after 60 days. While EE does have a comment expiration field in the Publish/Edit Form, it’s a pity to set each post’s expiration date manually when a single 60-day rule covers them all. So the PHP here tests whether the entry is less than 60 days old, and if it is, the variable $still_allow_comments is set to “yes”, displaying the comment area’s header as an invitation to comment rather than a notice that comments are closed, followed later by the comment form.

Near the end of the template is the call to the sidebar. This call could have been made from the footer except for the sidebar needing to know if our page is a Lens entry with a landscape-shaped image, and if so to not display certain sidebar modules since they conflict with the image. (The sidebar template could also find out what it needs by running the weblog:entries tag itself.)

The comments are displayed in a sub-template /site/display-comments because we need them to be outside of the weblog:entries tag in order to display Khoi’s comments differently (though in retrospect that could probably be handled with a PHP conditional):

{exp:comment:entries weblog="subtraction|lens|elsewhere" dynamic="off" entry_id="{embed:thisentry_id}"}
<div class="remarks-lead{if author_id=="1"} owner{/if}">
 <
div class="remarks-date">
  <
b>{comment_date format='%D %d %M %Y'}</bat {comment_date format='%h&#58;%i %a'}<br />
  
{url_as_author}
 
</div>
 
{comment}
 
<div class="clear"></div>
</
div><!-- /.remarks-lead -->
{/exp:comment:entries} 

The Sidebar Template

/site/sidebar:

<div id="sidebar">

 
{!-- QUICK ACCESSDisplay on HomepageMonthlyCategoryArticle --}

 {if 
  
"{embed:pagetype}" == "homepage"
  
|| "{embed:pagetype}" == "monthly"
  
|| "{embed:pagetype}" == "category" 
  
|| "{embed:pagetype}" == "article"
  
|| "{embed:pagetype}" == "about"
 
}
 
<div class="sidebar-module">
  <
h3>Quick Access</h3>
  
{exp:stats weblog="subtraction|elsewhere|lens"}
  <?php $total_entries 
number_format("{total_entries}"); ?>
  {
/exp:stats}
  
<class="first"><a href="http://www.subtraction.com/archives/"><?php echo $total_entries?></aposts since July 2000.</p>
  <
div class="full-archives">
   <
label>Dates</label>
   <
div class="pulldown">
    <
select name="date-archive" onchange="jumpMenu('parent',this,0)">
     <
option value="" selected="selected">Select&#8230;</option>
     
{exp:weblog:month_links limit="12"}
     
<option value="{path=/}">{month} {year}</option>
     
{/exp:weblog:month_links}
     
<option value="http://www.subtraction.com/archives/">All Older Posts</option>
    </
select>
   </
div><!-- /.pulldown -->
  </
div><!-- /.full-archives -->
  <
div class="full-archives">
   <
label>Categories</label>
   <
div class="pulldown">
    <
select name="date-archive" onchange="jumpMenu('parent',this,0)">
     <
option value="" selected="selected">Select&#8230;</option>
     
{exp:weblog:categories weblog="subtraction" category_group="1" 
  
style="linear" orderby="title" disable="category_fields" }
     
<option value="{path=/}">{category_name}</option>
     
{/exp:weblog:categories}
    
</select>
   </
div><!-- /.pulldown -->
  </
div><!-- /.full-archives -->
 </
div><!-- /.sidebar-module -->
 
{/if}

 {
!-- RECENT POSTSDisplay on MonthlyCategoryArticle providing not Landscape --}

 {if 
  
"{embed:pagetype}" == "monthly" 
  
|| "{embed:pagetype}" == "category" 
  
|| "{embed:pagetype}" == "article" 
  
&& "{embed:articletype}" != "landscape" 
 
}
 
<div class="sidebar-module">
  <
h3>Recent Posts</h3
  
{exp:weblog:entries orderby="date" sort="desc" limit="5" weblog="subtraction" dynamic="off"
  
disable="pagination|categories|member_data|trackbacks"}
  
<class="date">{entry_date format='%d %M %Y'}</p>
  <
h4><a href="{path={entry_date format=">{title}</a></h4>
  
{summary}{lens-caption}
  {
/exp:weblog:entries}
 
</div><!-- /.sidebar-module -->
 
{/if}

 {
!-- ABOUT MEDisplay on Homepage --}

 {if 
"{embed:pagetype}" == "homepage"}
 {
!-- Display on homepage --}
 
<div class="sidebar-module">
  <
h3>About Me</h3>
  <
class="first">I work as the Design Director at <a href="http://www.nytimes.com">NYTimes.com</a>, 
 and 
I have a dog named <a href="http://www.misterpresident.org/">Mister President</a>. 
 <
a href="http://www.subtraction.com/about/">Read more</a>.</p>
 </
div><!-- /.sidebar-module -->
 
{/if}

 {
!-- PLEASE NOTEDisplay on Homepage --}

 {if 
"{embed:pagetype}" == "homepage"}
 
<div class="sidebar-module">
  <
h3>Please Note</h3
  <
class="first">Some things that may interest you.</p>
  <
a href="http://www.abriefmessage.com/"><img src="http://www.subtraction.com/images/tout_abm.gif" 
 
alt="A Brief Message" width="190" height="170" /></a>
  <
a href="http://www.misterpresident.org"><img src="http://www.subtraction.com/images/tout_mr_president.gif" 
 
alt="MisterPresident.org" width="190" height="50" /></a>
  <
a href="http://www.subtraction.com/archives/2007/0827_a_subway_sys.php">
<
img src="http://www.subtraction.com/images/tout_subway_maps.gif" alt="Subway Maps for iPhone" width="190" height="50" />
</
a>
 </
div><!-- /.sidebar-module -->
 
{/if}

 {
!-- GET YOUR XML ONDisplay on Homepage --}

 {if 
"{embed:pagetype}" == "homepage"}
 {
!-- Display on homepage --}
 
<div class="sidebar-module">
  <
h3>Get Your XML On</h3>
  <
ul class="xml">
   <
li><a href="http://feeds.feedburner.com/subtraction" class="atom">Subscribe to the Feed</a></li>
  </
ul>
 </
div><!-- /.sidebar-module -->
 
{/if}

 {
!-- COLOPHONDisplay on Homepage --}

 {if 
"{embed:pagetype}" == "homepage"}
 {
!-- Display on homepage --}
 
<div class="sidebar-module">
  <
h3>Colophon</h3>
  <
ul class="colophon">
   <
li><a href="http://www.apple.com" class="mac">Made with a Macintosh</a></li>
   <
li><a href="http://www.expressionengine.com" class="ee">Published with Expression Engine</a></li>
   <
li><a href="http://creativecommons.org/licenses/by-nc-sa/1.0" class="cc">Creative Commons License</a></li>
  </
ul>
 </
div><!-- /.sidebar-module -->
 
{/if}

 {
!-- RECENT REMARKSDisplay on Homepage --}

 {if 
"{embed:pagetype}" == "homepage"}
 
<div class="sidebar-module">
  <
h3>Recent Remarks</h3
  
<?php $count=""?>
  {exp
:weblog:entries sort="desc" orderby="date" limit="10" dynamic="off"}
  {if comment_total 
0}
  <?php
  $comments 
"{comment_total}";
  
$commentsShow $comments -1;
  if (
$count ) :
  
$count++;
  
?>
  {embed
="embeds/recent-remarker" thisentry_urltitle="{url_title}" 
 
commentsShow="<?php echo $commentsShow?>" datepath="{entry_date format="%Y/%m/%d/"}"}
  <?php 
endif; ?>
  {
/if}
  {
/exp:weblog:entries}
 
</div><!-- /.sidebar-module -->
 
{/if}
 
</div><!-- /sidebar --> 

The sidebar is comprised of a series of modules — Quick Access, Recent Posts, About Me, Please Note, Get Your XML On, Colophon and Recent Remarks — some static, some dynamic, each displayed or not depending on the value of the pagetype variable, which is always passed to the sidebar template by its parent.

For recent remarks, a template is embedded to display the comment:entries tag, with data passed to it from the weblog:entries tag. This is required because the comment:entries tag is missing some vital variables, such as entry_date and url_title. The embedded template is /embeds/recent-remarker:

{exp:comment:entries url_title="{embed:thisentry_urltitle}" 
  
disable="categories|custom_fields|member_data|pagination|trackbacks" limit="1"}
<class="date">{comment_date format="%d %M %Y"}</p>
<
h4>{name} {if embed:commentsShow 0}(and {embed:commentsShow} others{/if}on <a href="{path=/}{embed:datepath}{url_title}">{title}</a></h4>
{/exp:comment:entries} 

The Multi-Entry Template

That’s it for a single entry, now for the multi-purpose /site/multi-entry template:

<div class="clear"></div>

{if embed:pagetype == "homepage"}
<div id="cover">&nbsp;</div>
{if:elseif embed:pagetype == "monthly" }
{embed
="embeds/top-monthly"}
{if
:elseif embed:pagetype == "category"}
{embed
="embeds/top-categories"}
{
/if}

<div id="posts">

 
{if segment_1 == ""}
 {embed
="site/multi-entry-inner" entrieslimit="60"}
 {if
:else}
 {embed
="site/multi-entry-inner" entrieslimit="999"}
 {
/if}

 {
!-- if "{embed:pagetype}" != "category"}
 {embed
="embeds/posts-more"}
 {
/if --}

</div><!-- /#posts -->

{embed="site/sidebar" pagetype="{embed:pagetype}" articletype=""

The multi-entry template contains only three parts: its top, the posts, and the call to the sidebar. The top varies depending on whether the template has been called to display the homepage, a monthly or a category page.

The Multi-Entry Inner Template

If we’re on the homepage, the /site/multi-entry-inner template is called with a limit of 60 entries:

<?php 
$daylimit
=""
$daycount=""
?>

{exp
:weblog:entries weblog="subtraction|elsewhere|lens" orderby="date" sort="desc" 
 
limit="{embed:entrieslimit}" disable="member_data|trackbacks" relaxed_categories="yes"}
{date_heading display
="daily"}
<?php $daylimit
++; if ($daylimit=="1"{ $daylimit="2"} ?>
{
/date_heading}
{
/exp:weblog:entries}
 
<?php 
if ("{embed:entrieslimit}" != "60"{ $daylimit="999"} ?>

{exp
:weblog:entries weblog="subtraction|elsewhere|lens" orderby="date" sort="desc" 
 
limit="{embed:entrieslimit}" disable="member_data|trackbacks" relaxed_categories="yes"}

{date_heading display
="daily"}
<?php $daycount
++; if ($daycount $daylimit) : ?>
<div class="day">
 <
class="date">
  
{entry_date format='%D %d %M'}<br />
  
{entry_date format='%Y'}
 
</p>
 
<?php endif; ?>
 {
/date_heading}

 <?php 
if ($daycount $daylimit) : ?>

 <?php
 $still_allow_comments
="no";
 
$post_time=strval("{entry_date format='%U'}");
 
$current_time="{current_time}";
 
$comments_allowed_from $current_time 5184000;
 if ( 
$post_time >= $comments_allowed_from 
 
{
  $still_allow_comments
="yes";
 
}
 ?>

 {if weblog_short_name 
== "elsewhere"}
 
<h2 id="{entry_id}" class="elsewhere"><a href="{elsewhere-url}">{title}</a></h2>
 <
div class="post-lead">
  <
div class="time-remarks">
   <
div class="stars">
    <
a href="{path={entry_date format=" class="stars-{elsewhere-rating}">
<
img src="{site_url}assets/1-star.gif" alt="Stars" width="14" height="14" />
</
a>
   </
div><!-- /.stars -->
  </
div><!-- /.time-remarks -->
  
{if elsewhere-body != "" }
  {elsewhere
-body}
  {if
:elseif elsewhere-body == ""}
  
<p>&nbsp;</p>
  
{/if}
 
</div><!-- /.post-lead -->
 <
div class="clear"></div>
 
{/if}

 {if weblog_short_name 
== "lens"}
 
<h2 id="{entry_id}">
 <
a href="{path={entry_date format=" format="%m" format="%d">{title}</a>
</
h2>
 <
div class="post-lead lens">
  <
div class="time-remarks">
   
{entry_date format="%g:%i %A"}<br />
   
{if allow_comments && comment_total == 0}
   <?php 
if ( $still_allow_comments == "yes" ) : ?>
   
<a href="{path={entry_date format=">Add Remarks</a>
   
<?php endif; ?>
   {if
:elseif allow_comments && comment_total >= 1}
   
<a href="{path={entry_date format=">Remarks ({comment_total})</a>
   
{/if}
  
</div><!-- /.time-remarks -->
  <
a href="{path={entry_date format=">{lens-preview}</a
  
{if lens-caption != "" }
  {lens
-caption}
  {
/if}
  
<div class="full">
   <
a href="{path={entry_date format=">View Full Image</a>
  </
div>

  
{if allow_comments && comment_total == 0}
  <?php 
if ( $still_allow_comments == "yes" ) : ?>
  
<div class="add"><a href="{path={entry_date format=">Add First Remarks</a></div>
  
<?php endif; ?>
  {if
:elseif allow_comments && comment_total >= 1}
  <?php 
if ( $still_allow_comments == "yes" ) : ?>
  
<div class="add"><a href="{path={entry_date format=">Add Remarks ({comment_total} so far)</a></div>
  
<?php endif; ?>
  {
/if}
 
</div><!-- /.post-lead -->
 <
div class="clear"></div>
 
{/if}

 {if weblog_short_name 
== "subtraction"}
 
<h2 id="{entry_id}"><a href="{path={entry_date format=" format="%m" format="%d">{title}</a></h2>
 <
div class="post-lead">
  <
div class="time-remarks">
   
{entry_date format="%g:%i %A"}<br />
   
{if allow_comments && comment_total == 0}
   <?php 
if ( $still_allow_comments == "yes" ) : ?>
   
<a href="{path={entry_date format=">Add Remarks</a>
   
<?php endif; ?>
   {if
:elseif allow_comments && comment_total >= 1}
   
<a href="{path={entry_date format=">Remarks ({comment_total})</a>
   
{/if}
  
</div><!-- /.time-remarks -->
  
{if "{embed:pagetype}" != "category"}
  {body}
  {if extended 
!= "" }
  
<div class="continue">
   <
a href="{path={entry_date format=">Continue Reading</a>
  </
div>
  
{/if}
  {if
:else}
  {summary}
  {
/if}
  <?php 
if ( $still_allow_comments == "yes" ) : ?>
  {if allow_comments 
&& comment_total == 0}
  
<div class="add">
 <
a href="{path={entry_date format=">Add First Remarks</a>
</
div>
  
{if:elseif allow_comments && comment_total >= 1}
  
<div class="add">
 <
a href="{path={entry_date format=">Add Remarks ({comment_total} so far)</a>
</
div>
  
{/if}
  <?php 
endif; ?>
 
</div><!-- /.post-lead -->
 <
div class="clear"></div>
 
{/if}

{date_footer display
="daily"}</div><!-- /.day -->{/date_footer}

<?php 
endif; ?>

{
/exp:weblog:entries} 

Why is an inner template necessary? A choices of two values is required for the weblog:entries “limit” parameter because the homepage displays only the newest 60 entries whereas the other multi-entry pages — months and categories — display an unlimited number of entries. The problem is that a variable generated within a template doesn’t work as a weblog:entries tag’s limit parameter value due to the template parsing order. But variables passed from a parent template can be used there.

The first thing to notice is that the weblog:entries tag is called twice. While the homepage limit is 60 entries, Subtraction.com is organized daily, so if the oldest day contains say 5 entries but 57 have already been displayed, then only three of the final day’s entries will be shown. Khoi wanted the homepage’s final day to appear completely. So in the first call of the weblog:entries tag the number of days covered is counted as $daylimit, then in the second weblog:entries tag $daycount is incremented for each day, the day only displayed if the $daycount is smaller than the $daylimit:

<?php $daycount++; if ($daycount $daylimit) : ?>
...
<?php endif; ?> 

The result is that the final day, whether incomplete or not, is truncated from the homepage. (If we’re not on the homepage, the daylimit is set to 999 because we don’t need to apply it.)

Unlike on the single-entry template, each of the three weblogs is displayed differently enough here to warrant its own fork. But like the single-entry template, PHP code calculates whether comments are still allowed, determining whether the links read “Add Remarks” or just “Remarks”.

The Top Categories Template

Back up to the /site/multi-entry template, if we are not on the homepage but on a categories page then the conditional embeds the template /embeds/top-categories:

<div id="category-header">
 
<?php $catposts=""?>
 {exp
:weblog:entries weblog="subtraction|elsewhere|lens" orderby="date" sort="desc" limit="999" 
 
disable="category_fields|custom_fields|member_data|pagination|trackbacks" 
 
relaxed_categories="yes" status="not closed|Hold"}
 {if count
=="1"}
 <?php $catposts
="{total_results}"?>
 {
/if}
 {
/exp:weblog:entries} 
 {exp
:weblog:category_heading weblog="subtraction|lens|elsewhere" relaxed_categories="yes"}
 
<h1>{category_name}</h1>
 <
h3><?php echo $catposts?> posts</h3>
 
{if category_description}
 
<p>{category_description}</p>
 
{/if}
 {
/exp:weblog:category_heading} 
</div

Here the weblog:entries tag is run before the weblog:category_heading tag because category_heading lacks a count feature, and Khoi wasn’t doing without that. Using a PHP variable the weblog:entries tag enables us to remember the number of entries as $catposts. Since we’re in a /categories URL, which is what we’ve set as EE’s Reserved Category URL Indicator, the weblog:entries tag does not require a specified category as it’s already active. Then the weblog:category_heading tag displays the category’s name and description, if there is one, together with our $catposts.

The Top Monthly Template

If however we’re on a monthly page then instead of /embeds/top-categories the top is /embeds/top-monthly:

{exp:weblog:entries weblog="illustrate_me" limit="1" disable="member_data|trackbacks"}
<div id="illustration">
 <
img src="{illustrate_me_illustration}" alt="" />
</
div>
{/exp:weblog:entries}

<?php
$monthcount 
"";
$total_subtraction="";
$total_lens="";
$total_elsewhere="";
?>

{exp
:weblog:entries weblog="subtraction|elsewhere|lens" disable="member_data|trackbacks" limit="999" 
 
disable="categories|category_fields|custom_fields|member_data|pagination|trackbacks" status="not closed|Hold"}
{if count
=="1"}
<?php 
$monthcount 
"{total_results}";
?>
{
/if}
{
/exp:weblog:entries}

<?php $row
=""?>
{exp
:weblog:calendar weblog="subtraction|lens|elsewhere" leading_zeroes="yes"}
<div id="calendar">
<
h1 class="page-title">{date format="%F %Y"}

<span><?php if ($monthcountecho $monthcount " posts"} ?></span>
</
h1>

<
table border="0" cellspacing="0" cellpadding="0">

<
tr>
<
th>Sunday</th>
<
th>Monday</th>
<
th>Tuesday</th>
<
th>Wednesday</th>
<
th>Thursday</th>
<
th>Friday</th>
<
th class="last">Saturday</th>
</
tr>

 
{calendar_rows}
 {row_start}
<tr>{/row_start}

  {if entries}
  
<td>
   <
p>{day_number}</p>
   
{entries}
   
<a href="{path={entry_date format=" title="{title}"><img src="{site_url}assets/calendar_markers.gif" alt="{title}" width="95" height="10" /></a>
   
{/entries}
   
  
</td>
    
  
{/if}

  {if not_entries}
  
<td>
   <
p>{day_number}</p>
   <
img src="{site_url}assets/calendar_markers.gif" alt="" width="95" height="10" />
  </
td>
  
{/if}

  {if blank}
  
<td><p></p></td>
  
{/if}

 {row_end}
</tr>{/row_end}
 {
/calendar_rows}

</table>
</
div>
{/exp:weblog:calendar}

{exp
:weblog:entries weblog="illustrate_me" limit="1" disable="member_data|trackbacks"}
{exp
:replace find="</p<" replace=""}{illustrate_me_caption}{/exp:replace} {related_entries id="illustrate_me_subtraction"}Read the <a href="{path={entry_date format=">interview about this illustration</a>.</p>{/related_entries}
{
/exp:weblog:entries}

<div class="clear"></div

Here too links get an assist from EE’s natural functioning: in this template’s three weblog:entries tags neither the year nor month need be specified because the system already grabs them from the numerical /year/month format of the URL. Yes, parameters could be added explicitly to the weblog:entries tags:

year="{segment_1}" month="{segment_2}" dynamic="off" 

But it’s nice to let her sail as she was designed.

The first weblog:entries tag displays the discontinued Illustrate Me image if it exists for that month. Although Khoi does not plan to revive this feature, it’s easier to let EE handle the scheduling of discontinued content types just the same way it handles ongoing ones. So Illustrate Me has a weblog just as do Subtraction, Elsewhere and Lens.

The next weblog:entries instance is similar to the one in the /embeds/top-categories template that counts entries in the category, except this time we’re counting entries in the month. (Note that here all options are disabled while in /embeds/top-categories categories was still enabled.)

Then within Khoi’s sleek-looking calendar we list any Subtraction, Lens or Elsewhere entries, linking as always to their blog-style URLs:

{path={entry_date format="%Y/%m/%d"}}{url_title} 

At the end of the template the Illustrate Me weblog is called again to retrieve and display its caption, which appears after the calendar. (To save server processsing we could have grabbed this data from the earlier call to Illustrate Me, setting it there as a PHP variable to display later down below.)

The Archives Template

Just one major screen remains, the Archives, which differs from all the others so requires its own template:

{if segment_2 == ""}

{embed
="site/header"}

<div id="column-a">
 <
h1>Archives<br />by Date</h1>

 
<?php $x=""?>
 {exp
:yearly_archives weblog="subtraction|lens|elsewhere" status="not closed" monthsort="desc" show_future_entries="no"}
 {months}
 {if num_entries}
  <?php 
  $x
++;
  if ( 
$x 4) : 
  
?>
  
<div class="archive-unit">
  <
h2><a href="{path=/}{year}/{month_num}"><span>{month} {year}</span>{num_entries} posts</a></h2>
  
{embed="embeds/archives-date" year="{year}" month="{month_num}"}
  <?php 
else : ?>
  {if month_num
=="12"}<h2 style="clear: both; text-align: left">{year}</h2>{/if}
  
<div class="archive-subunit">
  <
h2><a href="{path=/}{year}/{month_num}"><span>{month}<!-- {year}--></span><br />{num_entries} posts</a></h2>
  
<?php endif; ?>
 
</div><!-- /.archive-unit -->
 
{/if}
 {
/months}
 {
/exp:yearly_archives}

</div><!-- /#column-a -->

<div id="column-b">

 <
h1>Archives<br />by Category</h1>
 
 
{exp:query sql="SELECT count(exp_category_posts.entry_id) 
 AS post_count, exp_category_posts.cat_id, exp_categories.cat_name, 
 exp_categories.cat_url_title, exp_categories.cat_description 
 FROM exp_categories, exp_category_posts, exp_weblog_titles 
 WHERE exp_category_posts.cat_id = exp_categories.cat_id 
 AND (exp_weblog_titles.weblog_id = '1' || exp_weblog_titles.weblog_id = '2' || exp_weblog_titles.weblog_id = '4') 
 AND exp_weblog_titles.entry_id = exp_category_posts.entry_id GROUP BY exp_categories.cat_name"
}
 
<div class="archive-unit">
  <
h2><a href="{path=tags}{cat_url_title}"><span>{cat_name}</span>{post_count} posts</a></h2>
  
{if cat_description}<p>{cat_description}</p>{/if}
 
</div><!-- /.archive-unit -->
 
{/exp:query}

</div><!-- /#column-b -->

{embed="site/footer"}

{
/if}
{if segment_2 
!= ""}

<?php
$original_segment2 
"{segment_2}";
$year $original_segment2;
$original_segment3 "{segment_3}";
$month substr($original_segment302);
$date substr($original_segment322);
$urltitle substr($original_segment35);
$urltitle rtrim($urltitle".php");
$urltitle strtr($urltitle"_""-");
$path $year "/" $month "/" $date;
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.subtraction.com/" $path "/" $urltitle);
exit();
?>

{
/if} 

Archives by Date relies on the Yearly Archives plugin by Lodewijk Schutte. For the most recent three months the titles of the posts are displayed as well as the post count, after which the listing recedes to just a post count. These first three are separated from the others using a counter and a conditional, and only if the counter is less than 4 do we embed the template /embeds/archives-date (it must be embedded because the weblog:entries tag won’t work within the yearly_archives plugin):

<p>{exp:weblog:entries weblog="subtraction|elsewhere|lens" dynamic="off" year="{embed:year}" month="{embed:month}" disable="categories|category_fields|custom_fields|member_data|pagination|trackbacks"}
<a href="{path={entry_date format=">{title}</a>&nbsp;+&nbsp;
{/exp:weblog:entries}</p

This small template, having received the year and month, displays the month’s post titles and links to them. Since only the posts’ titles and URL titles are used, everything else in the weblog:entries tag is disabled. Each but the latest post is preceded by a “+”. Again the links to individual entries are in the blog-standard year/month/date format.

The rest of the months are tested to determine if they are December, and if so a yearly heading is inserted. Note that all the action is within a conditional that tests whether the month actually has any entries, this to omit empty months.

Over on the right Archives by Category are displayed using the Category Count technique from the EE Wiki.

Legacy URLs

All this is set to display only if the URL’s segment #2 is empty. If it’s not then we’re on a legacy URL from MoveableType, such as /archives/2005/1025_european_vac.php, and some PHP string manipulation at the end of the template converts this URL into one of our new ones. The year is retrieved from the original segment #2, the month from the first two characters of the original segment #3, the date from the next two characters, and the URL title from the 5th character on. The URL Title’s “.php” is chopped off then any underscores are converted to dashes. The result is /2005/10/25/european-vac, to which the browser is redirected. It’s great that the site had a consistent URL structure in its previous incarnation otherwise this would have been a lot harder.

The Footer Template

Now to the footer:

<div class="clear"></div>

{if segment_1=="" || segment_4 != ""}
<div id="cat-table">
 <
h3>Categories</h3>
 <
table cellspacing="0" cellpadding="0" border="0">
  <
tr>

   
{!-- Get the number of categories --}
   {exp
:query sql="SELECT count(cat_id) FROM exp_categories WHERE group_id='1' GROUP BY cat_id"}
   <?php $count
="{count}" ?>
   {
/exp:query}

   {
!-- Calculate the length of each column based on a manually-set number of columns --}
   <?php
    $cols 
4;
    
$thiscol 0;
    
$collengthround($count $cols);
    
$offset=0;
    while (
$offset $count):
   
?>

   {
!-- Display a column --}
   <?php $thiscol
++; if ($thiscol 5): ?>
   
<td>
    <
ul>
     
{embed="embeds/footer-categories" count="<?php echo $collength; ?<" offset="<?php echo $offset; ?<"}
    
</ul>
   </
td>
   
<?php endif; ?>
   <?php 
if ($thiscol 4): ?><td class="shim"></td><?php endif; ?>

   {
!-- Increase the offset by the length of a column and reiterate until done --}
   <?php
    $offset 
$offset $collength;
    endwhile;
   
?>

  
</tr>
 </
table>
</
div><!-- /#cat-table -->
{/if}

<div id="footer">
 <
p><a href="http://www.subtraction.com">Subtraction.com</a> and all contents copyright 1998-{current_time format="%Y"
 by {encode
="[unencoded email address]?subject=Regarding Subtraction.com" title="Khoi Vinh"}unless otherwise noted.<br />
 
Contents under <a href="http://creativecommons.org/licenses/by-nc-sa/1.0/">Creative Commons License</a>. 
 
Visual designlayout and Cascading Style Sheets may not be reused without permission.</p>
</
div><!-- /#footer -->

</div><!-- /home or articles -->
</
body>
</
html

Khoi wanted his list of categories to be divided equally across four columns. First the number of categories is retrieved using a query tag and assigned to the PHP variable $count. Then the length of the columns, $collength, is calculated by dividing the number of categories by the number of columns, four. A loop displays each column. An offset value is also required so that the subsequent columns don’t merely repeat the first one. Since a PHP variable can’t be passed into a query tag due to the template parsing order, each column is displayed within an embedded template:

{exp:query sql="SELECT count(exp_category_posts.entry_id) AS post_count,
exp_category_posts.cat_id, exp_categories.cat_name, exp_categories.cat_url_title
FROM exp_categories, exp_category_posts, exp_weblog_titles
WHERE exp_category_posts.cat_id = exp_categories.cat_id
AND exp_weblog_titles.weblog_id = '1'
AND exp_weblog_titles.entry_id = exp_category_posts.entry_id
GROUP BY exp_categories.cat_name LIMIT {embed:count} OFFSET {embed:offset}"
}
<li><a href="{path=site_index}categories/{cat_url_title}/"><span>{cat_name}</span>{post_count}</a></li>
{/exp:query} 

Here again the Category Count technique is taken from the EE Wiki, with a limit and offset appended to the query, populated with values passed from the parent template.

We’re almost done, everything covered except the header:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

{assign_variable:my_template_group="site"}
{assign_variable
:my_weblogs="subtraction|lens|elsewhere"}
<?php $css
=""?>

<html>
<
head>
<
title>
 
Subtraction on Expression Engine{if "{segment_1}" == ""} 7.0{if:else}:{/if}
 {if segment_1 
!= "categories"}
 {exp
:weblog:entries limit="1" dynamic="off" url_title="{segment_4}" disable="categories|category_fields|member_data|pagination|trackbacks"}
 {
!-- Article --}{if "{segment_4}" != ""}{title}{/if}
 {
!-- Monthly --}{if "{segment_2}" != "" && "{segment_1}" != "categories" 
 
&& "{segment_1}" != "archives" && "{segment_3}" == ""}
{entry_date format
="%F %Y"} Archives
{
/if}
 <?php 
 $css
="{css}{elsewhere-css}"
 
$entryid="{entry_id}";
 
?>
 {
/exp:weblog:entries}
 {
/if}
 {
!-- Category --}{if "{segment_1}" == "categories"}{exp:weblog:category_heading weblog="subtraction|lens|elsewhere" relaxed_categories="yes"}{category_name}{/exp:weblog:category_heading} Archives{/if}
 {
!-- Archives --}{if "{segment_1}" == "archives"}Archives{/if}
</title>
<
link rel="stylesheet" href="{stylesheet=styles/main}" type="text/css" />
<
link rel="stylesheet" href="{stylesheet=styles/nav}" type="text/css" />
<
link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> 
<?php if ($css != ""): ?>
<style>
<?php echo $css?>

</style>
<?php endif; ?>
<link rel="alternate" type="application/atom+xml" title="Atom" href="http://feeds.feedburner.com/subtraction" />
<!-- 
script src="/mint/?js" type="text/javascript">
 
//create jump menu
function jumpMenu(targ,selObj,restore)//v3.0
eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
if (
restoreselObj.selectedIndex=0;
}

</head>

<
body>
<
div id="{if segment_1 == ""}home{if:elseif "{segment_2}" != "" && segment_4 == "" && "{segment_1}" != "categories
 && "
{segment_1}" != "archives" && "{segment_1}" != "about" }
 calendar
 {if:elseif "
{segment_1}" == "categories"}
 category
 {if:elseif "
{segment_1}" == "archives"}
 archives
 {if:elseif "
{segment_1}" == "about"}
 about
 {if:elseif segment_4 != ""}
 articles
 {/if}
"
>
<
div id="header">
 <
h1><a href="http://www.subtraction.com">Subtraction</a></h1>
 <
p><img src="http://www.subtraction.com/assets/subtraction_logo_black.gif" alt="+S" width="23" height="23" />
 
Version 7.1 Beta This dev server page {elapsed_time} secs<br /><a href="{path=about}">Khoi Vinh</a>&#8217;s Web Site</p>
 
<h4>Search <span>via Google</span></h4>
 <
div>
  <!-- 
Google CSE Search Box Begins -->
  <
form id="searchbox_005794356726363419020:mq1sdd86pfu" action="http://www.subtraction.com/search/">
  <
input type="hidden" name="cx" value="005794356726363419020:mq1sdd86pfu" />
  <
input type="hidden" name="cof" value="FORID:9" />

  <
input name="q" class="search-field" type="text" />
  <
input type="submit" name="sa" value="Go" />
  </
form>
  <!-- 
Google CSE Search Box Ends -->
  </
form>
 </
div>
</
div><!-- /#header -->

<div id="navcontainer">
 <
ul id="navlist">

  <
li class="home"><a href="{path=/}">Home</a></li
  <
li><a href="{path=archives}">Archives</a></li>
  <
li><a href="{path=about}">About</a></li>

  
{if segment_1 != "" && segment_1 != "archives" && segment_4=="" && segment_1 != "categories" } {!-- Monthly index --}

  
<li class="short"></li>

  
{exp:weblog:calendar weblog="subtraction|lens|elsewhere" leading_zeroes="yes"}
  
<li id="prev"><a href="{previous_path=/}">Previous</a></li>
  <
li id="next"><a href="{next_path=/}">Next</a></li>
  
{/exp:weblog:calendar}

  {if
:elseif segment_1 == "" OR segment_1 == "archives" OR segment_1 == "categories"}
  {
!-- HomepageArchives and Categories pages --}

  
<li id="empty"></li>

  
{if:elseif segment_4 != ""} {!-- Article --}

  {embed
="embeds/next-previous" thisentry_entryid="<?php echo $entryid; ?<"}
  
  {
/if}

 
</ul>
</
div><!-- #navcontainer -->

<div class="clear"></div

Within the window title is a weblog:entries tag. If we’re on an article the tag displays the article title and captures the entry ID and entry-specific CSS, if any, to insert later in the template (for performance reasons we only want to invoke the weblog:entries tag once in the header). If we’re on a monthly page then the month and year are displayed in long format. Otherwise the weblog:entries tag is skipped, and if we’re on a categories page then the category_heading tag is called to display its name, or if we’re on the archives page then that is stated.

Using PHP the article’s unique CSS is displayed if it has any. Then after the body is declared the outer div is given its id based on the URL.

The Next and Previous links differ depending on the page type. If we’re on a monthly page they display the next and previous month using the calendar tag. If we’re on an article they display the next and previous article. The next and previous links for articles are a casualty of our blog-style URLs: they simply don’t work. After some trial and error we gave up and used the Query module instead:

<li class="short"></li>
<
li id="prev">
 
{exp:query sql="SELECT title, url_title, entry_date FROM exp_weblog_titles 
 WHERE entry_date < '{embed:thisentry_entrydate}' AND status='open' 
 AND (weblog_id='1' OR weblog_id='2' OR weblog_id='4' OR weblog_id='5')
 ORDER BY entry_date DESC LIMIT 1"
}
 {if title}
 
<a href="{path={entry_date format=">Previous</a>
 
{/if}
 {
/exp:query}
</li>
<
li id="next">
 
{exp:query sql="SELECT title, url_title, entry_date FROM exp_weblog_titles 
 WHERE entry_date < '{embed:thisentry_entrydate}' AND entry_date <= '{current_time}' AND status='open' 
 AND (weblog_id='1' OR weblog_id='2' OR weblog_id='4' OR weblog_id='5')
 LIMIT 1"
}
 {if title}
 
<a href="{path={entry_date format=">Next</a>
 
{/if}
 {
/exp:query}
</li

Since the writing of this article I’ve developed a plugin, Nearby Entries, that solves the problem of displaying next/previous entries when using the year/month/date URL format.

Stepping back, I’m honored to have worked on this site that I admire so much. Thanks Khoi for the opportunity.

Add-ons

The site uses the following EE add-ons:

Plugins:

Extensions

What’s with all the excellent Dutchmen?

Tue 30 Sep ’08
10:58am

dave

excellent post. Did you have to make a htaccess file as well for removing the EE url structure (use of index.php) etc., ?

It would be interesting to know the structure you used for a posts entry form. If you have multiple images split in the body of a text page I find Mark Huot’s File doesn’t really help. Image uploading is still a bit slow using EE I find. If you have any tips that would be interesting to read.

Tue 30 Sep ’08
3:06pm

mattresses

this was pretty interesting, thanks for puttin it up.

Wed 1 Oct ’08
11:51am

Steven Hambleton

I don’t know about you but you don’t realise just how much you end up coding until you sit back and print it all out like that!

Good job!

Wed 1 Oct ’08
12:59pm

Adam Khan

Dave, yes, I almost always use the htaccess file method for removing index.php, so it’s so par for the course that I didn’t think to mention it here. I generally use the “File and Directory Check” method documented in the “Remove index.php From URLs” entry in the EE WIki.

For multiple images split in the body of a text I’ve often just created Body, Body2, Body3 fields so the site author can control where the split happens. It seems clunky but there isn’t too much downside. Depends on the user as well. That’s not what happens on Subtraction—Khoi handcodes HTML within his entries and uploads images separately. We only used File for his defunct Illustrations section. That’s how he’s used to working (though I’m going to suggest he use File for his new Lens weblog for photos).

Thanks for the feedback, Mattresses and Steven.

Wed 1 Oct ’08
6:01pm

Christopher L. Jorgensen

Way cool write up. I wish I had more time to actually learn EE. Or I wish I had the cash to outsource the things I don’t understand.

Vinh?s site looks pretty much the same, but I liked it before, so glad to see it’s functional changes, and not cosmetic ones.

Also, in your code examples above some shoot way off the page in Safari on 10.5.5.

Sun 5 Oct ’08
5:25pm

Devon Shaw

Bookmarked for the EE Jedi tricks. This is great stuff. I’ve used EE for nearly two years now but never gone so far as to exercise the robustness of the conditionals. I learned a lot from this post, thanks for putting it up.

Fri 31 Oct ’08
5:34pm

allgood2

Great post Adam. You just gave me the ability to streamline a days-past PHP code, I created for a client, that performs a similar function to yours?removing access to comments and a featured image at a specific time frame. Excellent.

I think this is an excellent instructional on what needs to happen when not using EE’s dynamic handling for URLs. Thanks for the write-up.

Sat 10 Jan ’09
3:29pm

Ryan Irelan

Great write-up, Adam.

Did you know that EE has a built-in setting for expiring the comments after a certain number of days? It’s under the Comment Posting Preferences section of Weblog Management.

Sat 10 Jan ’09
5:06pm

Adam Khan

Ryan, how embarrassing, I didn’t know about that setting. Thanks for the kind words and the heads-up.

Tue 30 Jun ’09
12:25am

Victor

hi - excellent work. I just recently started learning EE and looking at your code, it seems I have a long way to go.

I have a question in regards to your implementation of the footer, especially the category section. I was able to follow the logic until the second block of code where you talk about “Since a PHP variable can?t be passed into a query tag due to the template parsing order, each column is displayed within an embedded template:”

where exactly is that code implemented in relation to the footer code above it?  I am thinking of implementing a similar solution in a sidebar with only 2 columns in this case. if you can provide gudance on which code goes on the page itself and which block is an include element that will be great! thx!

Tue 30 Jun ’09
8:58am

Adam Khan

Victor, the template that begins with the query tag is the embedded one, ie, /embeds/footer-categories.

Regarding having a long way to go, well, this article is the solution in retrospect, but when working on a site you just bang on through tackling each problem as it comes until they’re all tackled and next time it’s possibly easier because you’ve done something similar previously.

Wed 26 May ’10
4:44am

Willy Schwenzfeier

Hey Adam, super helpful post. Especially the explanation of the blog-standard URLs, a technique I’ve studied very closely and used a few times. Thanks much.

I’m wondering how you’d handle adding pagination to the home page if Khoi wanted sequential pages of 60 posts each? It seems like the segment queries in your /site/index template would have a tough time testing for the “P1” type segments that the paginate tag creates. Any strategies make sense to you?

Thanks again for the great post.

Wed 26 May ’10
4:51am

Adam Khan

Funny you should mention that, Willy, as I’m just about to do it somewhere else. I was vaguely thinking of doing pagination non-natively, with a URL setup of /pages/1, pages/2, etc, and just passing an offset parameter to the template that contains the weblog:entries tag.

Wed 26 May ’10
6:20am

Willy Schwenzfeier

Wow that was quick!

Interesting. That might just do it.

Alternately, i was just poking around in the EE forums and docs and discovered that perhaps we could try using paginate_base=“site/paging-template” in the weblog:entries tag to force EE to skip index.php altogether and go straight to a template that’s just for pagination. In Khoi’s case, that could hold {embed=“site/header”}{embed=“site/site/multi-entry”}{embed=“site/footer”} and deliver a URL like /site/paging-template/P60/. Perhaps a little awkward, but if you came up with a good name for that template (maybe even with its own template group) it might be fine.

I’m doing a site now where the blog-standard URLs will follow the the “news” template group (ie /news/2010/05/26/news-story/). If I used this method then, I think I could end up with pagination URLs like /news/stories/P15 which might not be half bad.

Thanks again.

Wed 26 May ’10
6:32am

Adam Khan

Yep, that should do it. Re speedy response—freak occurrence.

-Adam

Tue 9 Nov ’10
6:30am

Adrian

According to this link, embeded templates are still parsed after advanced conditionals, so you should be fine in this instance.

http://expressionengine.com/forums/viewthread/168268/

Wed 8 Feb ’12
7:21am

StephanieMartus

Just starting to learn EE… so your codes going to help me. Looking forward for more such posts!!!
bridge

Tue 2 Jul ’13
1:18pm

graduate admission

Official plug-ins are installed from the ExpressionEngine directory which is managed and maintained by EllisLab, the company behind expression engine, while unofficial plug ins are installed from third-party websites.
graduate admission

Mon 8 Jul ’13
10:54am

Fred

Thanks for taking this opportunity to discuss this, I appreciate with this and if you have some more information please share it with me.
psychological statistics help

Thu 8 Aug ’13
8:55am

Khan

Employing PHP your article’s exclusive CSS is usually available if it offers almost any. need help writing a essay After that following the person is declared your exterior div is usually offered its identity good WEB ADDRESS.

Thu 22 Aug ’13
7:44am

monu

Essay Writer provides an extensive custom essay writing services. Find out how Essay Writer’s custom essay writing services can benefit you.
essay writing on pollution

Fri 30 Aug ’13
5:07pm

paper writing services

Very informative site. Its one of the best sites I have ever seen. paper writing services

Sat 7 Sep ’13
11:44am

niki

In the event we’re on the month to month site then a thirty day period as well essay writer as yr tend to be shown with long data format.

Wed 11 Sep ’13
9:58am

yogesh

For your conversion of the eminent Subtraction. com maze place on the illustrious ExpressionEngine chic creating calendar, http://australia-homework.com/physics-help/  the crucial matter architectural ken has been that only on the catalog of important prediction filters are both unattached-adit or perhaps multi-entrance.

Mon 16 Sep ’13
11:20am

david333

At the very 1st, I’d favor to state thanks to you for this enlightening article
essay writing service
Second, I’d prefer to wonder wherever I can learn a lot more info concerning your post. essay writing service
I arrived right here essay writing service =)yepi

Tue 24 Sep ’13
8:54am

casper

A very good detail on how the subtraction . com was converted on to the EE system was a very good article to read on. The html file formats have enabled a better understanding over the tiopic. Thank you for this share here .
click

Sun 27 Oct ’13
8:09pm

论文格式

To sell products must be properly raspredilyat finances.

Mon 28 Oct ’13
3:30pm

Spencer

This is the great blog for all who wants to know about this topic.
dissertation help by dissertation point | buy dissertation from dissertation point | dissertationpoint.co.uk/dissertation-proposal

 

Wed 30 Oct ’13
9:48am

www.bmxforum.co.uk

www.bmxforum.co.uk  Very interesting post. really informative. of all the blogs I have read on the same topic, this one is actually enlightening.

Thu 31 Oct ’13
11:19am

male enhancement products

When I use my search engine to look for blogs to read yours has come up several times on different categories. That just made me want to read it more, I can see why. It is excellent. Keep up the awesome work and I will continue reading. male enhancement products

Sat 16 Nov ’13
12:51pm

unmarried

The various multi-vestibule censors are consequently powered by only unattached multi-record template plus the unmarried-adit sieves by barely single single-passage template, reducing the array of templates obligatory, making the point easier to declare. debt consolidation quotes

Wed 20 Nov ’13
11:02am

nh-ehealthinsurance

At the conclusion, we headed up to Murphy Dome for what proved to be the most amazing evening of aurora since we had arrived. nh-ehealthinsurance

Wed 27 Nov ’13
4:30am

socialmediapoker.com

I think they are doing any good for all of us.. that’s how it is then for me and I do like it. It’s really going to be so fun. socialmediapoker.com

Fri 13 Dec ’13
2:31am

click

how many free credit reports do you get Another great post. It was really nice of you to share such information

Sat 14 Dec ’13
10:40am

Against

Against these location-full canons is shoveled as many as earthly in demand to lower the primary templates. belfast solicitors

Tue 17 Dec ’13
9:54am

One of the

One of the most trustworthy substitute when you have projects including tailor made documents and also other kinds should be to uncover tailor made producing services and find your job completed by simply professionals. compare payday loans

Wed 18 Dec ’13
10:01am

Expression

Expression Engine trap publishing computer, the solution architectural understanding was that total however unit of the chief censors are either separate-item or multi-contestant. The various multi-vestibule censors are consequently powered by equitable digit multi-vestibule template furthermore the lone-passage censors by barely united unique-entrance template, reducing the cipher of templates mandatory, making the location easier to allege. Handmade Luxury Range of Wedding Invitations

Fri 20 Dec ’13
6:58pm

soha

I think we’re having fun. I think our customers really like our products. And we’re always trying to do better.translate language

Tue 24 Dec ’13
11:16am

They may be

They may be already been shown to be the best along with the most reliable method to enhance your personal easy-guide place together with help you a great deal of sensation problems. The idea doesn’t make any difference in the event you’re their studies at college or it could be college – tailor made essay or dissertation services are usually productive from producing some thing. cheap skip hire

Tue 24 Dec ’13
4:29pm

gujjar

Flaming enthusiasm, backed up by horse sense and persistence, is the quality that most frequently makes for success.
regtransfers

Sat 28 Dec ’13
6:28am

Bella Kate

Good to know this knowledge, Writer give in article to many guidance thanks. dissertation writing services by dissertation palace || dissertation proposal assistance

Sat 28 Dec ’13
12:13pm

Charlie

I read this converting subtraction, very attractive article. pay someone to do your assignment || free assignments

Sat 28 Dec ’13
2:17pm

eram

The most important single ingredient in the formula of success is knowing how to get along with people.
Parajumpers Norge

Tue 31 Dec ’13
6:56am

Online Online Casino

Online reading is not my thing. But after reading your blog I am really pleased. I don’t know about other blogs but this I will definitely keep coming back to.

Tue 31 Dec ’13
6:59am

Free Social Poker Rooms Info

Hi there colleagues, how is the whole thing, and what you wish for to say regarding this paragraph, in my view its actually remarkable in favor of me.  Online Online Casino :
777 Casino Clubs :
888 Casino Vegas :
999 Casino Games :
Big Casino Online :
European Betting :
Kings Poker Rooms :
Poker Fun Games :
Poker Games Sites :
Royal Casino Games :
Poker Guideline :
Sports Betting UK :
Online Casino Banking :
Perfects Sports Betting :
Wiki Betting :
Revolution Gambling :
Poker Royale Games :
Varitaion Bingo :
MicroGaming Blackjack :
Barriere Poker :
Casinos Resource :
Multiple Bingo Rooms

Tue 31 Dec ’13
7:00am

Reputable Online Casinos

This post is truly inspiring. I like your post and everything you share with us is current and very informative, I want to bookmark the page so I can return here from you that you have done a fantastic job.  Reputable Casinos :
Win Gambling Casino :
Poker Grinding :
US Poker Rooms :
Ezine Casinos :
Sky Net Gambling :
Blackjack Round :
Java Casino :
Play 4 Roulette :
World Bingo Review :
Guide 4 Blackjack :
Slot Guidence :
E Poker Book :
Slot Tutorials :
Sunshine Bingo Books :
Pearls Poker :
Its A Bingos :
Top Casino Review :
Sport Tactics

Wed 1 Jan ’14
6:06am

So the PHP

So the PHP here criterions whether the door is inferior than 60 lifetimes antediluvian, plus if it is, the volatile $still_allow_comments is place to “yes”, displaying the discourse scope’s header as an bid to criticize somewhat than a observation that observations are closed, followed ensuing by the commentary matrix. Advertising Agencies

Fri 3 Jan ’14
11:40am

further

For the conversion of the famous Subtraction.com texture locale to the famous ExpressionEngine tangle publishing computer, the island architectural empathy was that many exclude alone of the important filters are either sole-ingress or multi-register. The various multi-passage censors are consequently powered by merely digit multi-record template further the lone-access examines by honest one single-entrance template, reducing the score of templates imperative, making the locale easier to preserve. Marriage Counselling Essex

Sat 4 Jan ’14
11:08am

So the PHP

So the PHP here experiments whether the entrance is lower than 60 dates doddering, further if it is, the volatile $still_allow_comments is clique to “yes”, displaying the statement turf’s header as an bid to statement somewhat than a mark that discourses are closed, followed afterwards by the observe mold. Mobile disco Herefordshire

Mon 6 Jan ’14
5:58am

Ahmad

men are doing the grocery shopping! In other news, they also apparently buy clothes, change diapers, and book swimming lessons. Will wonders never cease. The Times tells us that the grocery retailers are finally waking up to this supposed gender revolution: www.theonlinefashionshopping.com

Mon 6 Jan ’14
5:58am

Ahmad

I’m not a slim fit kind of guy, so I didn’t go for there most modern cut. The more modern suit looked great, but I’m not quite small enough (which is perfectly OK) to wear the suit comfortably. www.thestylemagazines.com

Thu 9 Jan ’14
4:36am

guide for bariatric surgery

If shopping at a supermarket, sign up for and use the store’s discount card, use coupons and take advantage of circular sales and purchase deals to minimize costs and maximize grocery store savings.guide for bariatric surgery

Thu 9 Jan ’14
7:08am

Wholesale leather leggings

Wholesale leggings from China leggings Wholesalers. You can Online Wholesale tight leggings,Wholesale knitted Leather leggings and more, Best quality and Cheap price Jeggings in China.
Wholesale Jeggings China
Wholesale Jegging China
Wholesale leather leggings

Sat 11 Jan ’14
7:48am

Stretch

Stretch EE does permit a statement death domain in the Broadcast/Emend Frame, it’s a compassion to clique per notify’s death lifetime manually during a singular 60-day formula sanctuarys them sum. The “weblog” parameter understandings bulk trio weblogs — subtraction, lens similarly overseas. Initially the template tags entries likewise albeit of their weblog, displaying the faith, rendezvous further clerk. Aways entries spike depending on their weblog.  excess baggage shipping by road

Tue 14 Jan ’14
1:18am

agen texas online

We are a group of volunteers and starting a new scheme in our community. Your web site provided us with valuable info to work on. You have done a formidable job and our whole community will be grateful to you.  Mobil Sedan COrolla,idrpoker.com agen texas poker online indonesia terpercaya

Tue 14 Jan ’14
1:19am

agen texas online

One of the valuable side-effects of integrating android operating system assistance to env3d is that customers can now use the Field Designer to make awesome looking 3D applications with a drag-and-drop interface. Here is a short movie to demonstrate how easy the procedure is: Mobil Sedan COrolla,idrpoker.com agen texas poker online indonesia terpercaya

Wed 15 Jan ’14
1:54pm

Ken

Well i certainly got amazed to read the scrambling story of conversion of Subtraction.com to Expression Engine. dissertationlabs.co.uk | dissertation proposal writing service

Thu 23 Jan ’14
12:27pm

Intimate

Intimate the close of the template is the yell to the sidebar. This hail could acquire been made from the footer exclude for the sidebar needing to apprehend if our messenger is a Lens entrance accompanying a view-shaped copy, besides if so to negative extend indubitable sidebar modules hence they discord accompanying the likeness.  Garage door installation service kent

Mon 27 Jan ’14
3:09pm

zoya

We have the superlative authors who can perfect total your melody chores, no engagement the distinction. From a 1-emissary thesis about your single to a reserve intricate slave formation on nano technologies, no monograph employment is similarly giant or very empty. Our club of writing pros consists of graduates over trainers efficient in a miscellany of bridles. Telephone Answering

Tue 28 Jan ’14
8:07am

mc-comm

I have express so many article of this site in which some of them were very interesting and inspiring.This article has good title with good description. mc-comm

Tue 28 Jan ’14
8:13am

rune2e

I have yor your post carefully and relies that this is a very attractive for everybody. I have gathered some knowledge from this post. I am really surprise with this post. rune2e

Thu 30 Jan ’14
10:16am

Nearby the end

Nearby the end of the template is the call to the sidebar. This delegate could hold been made from the footer disregard for the sidebar needing to see if our page is a Lens album with a sight-shaped photograph, besides if so to just publish absolute sidebar modules whereas they collide along the example. (The sidebar template could plus cognoscente extrinsic what it needs by running the weblog:entries tally itself.) Luxury Property market

Fri 31 Jan ’14
12:11pm

So

So the PHP here quizs whether the ingress is minus than 60 dates timeworn, moreover if it is, the capricious $still_allow_comments is place to “yes”, displaying the remark bailiwick’s header as an overture to observation instead than a caveat that expounds are closed, followed after by the observe mold. lawn treatment

Fri 31 Jan ’14
12:43pm

imran

The dilemma is that a wavering produced interior a template doesn’t process as a weblog:entries mark’s check parameter equity unpaid to the template parsing injunction. However uncertains passed from a spawn template can be worn there. video transcription services

Mon 3 Feb ’14
8:44am

About

About the intent of the template is the employment to the sidebar. This trumpet could behold been made from the footer lone for the sidebar needing to fathom if our herald is a Lens entrant with a site-shaped imagine, plus if so to no observe literal sidebar modules since they encounter concomitant the transcribe. (The sidebar template could and position elsewhere what it needs by running the weblog:entries pursue itself.) car hire at bristol airport

Mon 3 Feb ’14
11:02am

asfasf

The various multi-door filters are consequently powered by upright digit multi-passage template besides the lone-contestant filters by honest digit exclusive-item template, reducing the compute of templates imperative, making the spot easier to uphold. seamless gutters ct

Tue 4 Feb ’14
11:34am

Qalab

http://victorcasino.com/ There is no question that instantaneous water heaters are good options to trust in terms of their water heating services. However, you need to know that not all kinds of this water heater will work best for you.

Tue 4 Feb ’14
11:38am

http://willplaygamesforchange.com

http://willplaygamesforchange.com/ I have to say I am very impressed with the way you efficiently website and your posts are so informative.

Wed 5 Feb ’14
9:10am

shivani

Initially the template cranks entries likewise careless of their weblog, displaying the name, escort plus source. Accordingly entries utensil depending on their weblog. linkedin

Thu 6 Feb ’14
11:43am

anu

This invoke could hold been made from the footer eliminate for the sidebar needing to understand if our servant is a Lens adit beside a scene-shaped effigy, plus if so to hardly show indubitable sidebar modules as they disagree among the semblance. locks

Tue 11 Feb ’14
10:33am

kuchi

The “weblog” parameter embodys total trinity weblogs — subtraction, lens further away. Initially the template names entries likewise nevertheless of their weblog, displaying the style, tryst also poet. Besides entries tine depending on their weblog. allen gabriel plastic surgeon wa

Fri 14 Feb ’14
1:45pm

atend

For the conversion of the famous Subtraction.com trap scene to the prominent ExpressionEngine fabric publishing computer, the pivotal architectural clairvoyance was that sum besides person of the considerable sieves are either bachelor-entree or multi-passage.  Franchise your business

Tue 18 Feb ’14
7:04am

fff

This convoke could hold been made from the footer unless for the sidebar needing to understand if our servant is a Lens passage along a scene-shaped phantasm, plus if so to nay indicate infallible sidebar modules subsequently they variance along the phantasm. (The sidebar template could plus locate absent what it demands by running the weblog:entries mark itself.) Besides entries branch depending on their weblog. anchors

Tue 18 Feb ’14
1:59pm

Suresh

The sidebar is comprised of a series of modules — Speedy Attack, Contemporary Couriers, About Me, Delight Record, Comprehend Your XML On, Colophon besides Fresh Observations — few stationary, few active, apiece displayed or nay depending on the cherish of the pagetype wavering, which is always passed to the sidebar template by its originator. scott assemak

Thu 20 Feb ’14
7:12am

yogesh

Hi there associate this lenient of is singularly in rationalizes to the suitable blogposts that I’ve antecedent to looked over; you tenacity engage other appearances in the echo essay. I’m improve fast needing a arrange of stirring views using your surroundings as part of your pursuing radio. Hey, Amazing deaden, We introduce obtain extra that chic focus inert provide an ambiance We’ll always be tempo hinder for doing this on a persistent basis. free articles

Thu 20 Feb ’14
3:29pm

awinas

You cull ascertain My Composition Essay doing exhibitions on any flow you could think of. There are no details for paper handwriting that we can’t select concomitant expertise. So if you are looking for a pro writer to decisive paper objectives or utterly to give you a inventory of propitious thing particular intuitions for your shroud we can do it result. Triumph on the list button to earn started with your paper particulars. mice pest control east london

Thu 20 Feb ’14
7:27pm

eavedrop44

Thanks a ton for sharing your knowledge! It is great to see that some people still put in an effort into managing their websites. I’ll be sure to check back again real soon.www.edu-essay.com |

www.skincaretalking.com |

www.homeimprovement4sure.com |

www.estatesatpinecrest.com |

www.rtlstechnology.com |

Fri 21 Feb ’14
8:41am

gggdsg

This buzz could receive been made from the footer however for the sidebar needing to understand if our usher is a Lens door accompanying a scene-shaped phantasm, moreover if so to hardly expose unmistakable sidebar modules subsequently they disharmony accompanying the illustration.  water bottles with filters

Sat 22 Feb ’14
3:29pm

ashis

Choosing a intelligence could be the loud jim. Superb perspective theatre vermins burglary recondite connects registered kindred inspires depending on the purport. Nexts famous as rickety razz abilitys, the downstairs well-vivacity disease authoritative be established anything personss force mask regarding unmoving slim to provide a presumptuous mania in to a certain sideways as well as cupboard. cardiff roofing company

Mon 24 Feb ’14
6:38am

style globe

very attractive article.

Mon 24 Feb ’14
6:43am

clothing

good one. Visit clothing for latest trends in fashion.

Mon 24 Feb ’14
6:49am

health expert

I have gathered some knowledge from this post. I am really surprise with this post. disease
health to have a healthy lifestyle.

Mon 24 Feb ’14
6:55am

vegas casino

I am very impressed with the way you efficiently website and your posts are so informative. Visit casino gambling blackjack to have a better gambling experience.

Mon 24 Feb ’14
7:02am

world of gadgets

This article has good title with good description. Visit gadgets electronics technology for tips on purchasing electronic goods.

Mon 24 Feb ’14
7:13am

home guide

you have some more information please share it with me. Visit home improvement tips for home improvement advice’s.

Mon 24 Feb ’14
7:24am

career advice

You have done a formidable job and our whole community will be grateful to you. Visit college university for education and career guidance.

Tue 25 Feb ’14
8:34am

So the PHP

So the PHP here tastes whether the record is minus than 60 periods obsolete, also if it is, the unequal $still_allow_comments is bent to “yes”, displaying the say province’s header as an bid to word somewhat than a caveat that discourses are closed, followed subsequent by the criticize pattern.  Almost the terminal of the template is the demand to the sidebar. This dub could enjoy been made from the footer eliminate for the sidebar needing to apprehend if our servant is a Lens entree among a scenery-shaped form, besides if so to nay brandish actual sidebar modules because they variance along the replica. green deal approved installers

Tue 25 Feb ’14
11:56am

sdbghji

The “weblog” parameter accommodates many trinity weblogs — subtraction, lens further away. Initially the template manages entries likewise despite of their weblog, displaying the denomination, rendezvous also composer. Besides entries divide depending on their weblog. accommodation cape town

Tue 25 Feb ’14
3:14pm

noice

We compendium to gloss your info, studious tour plus to minister your petite simpler, static you review: ‘Who favoritism reasonable invigorate the entity professionally? ’ : Wrangle Lib is your perpetual creep asst. christian ministry outreach

Wed 26 Feb ’14
6:20am

Being a blog,

Being a blog, Khoi Vinh’s prominent Subtraction.com isn’t as sophisticated a snare position as person for an every union. Nevertheless because a model-carrier of draw perfection, all has to be barely so. As Khoi switched to EllisLab’s ExpressionEngine net publishing computer, quantity of the stipulations he wanted fell finished the rends of the software’s absent-the-cage functionality. This essay clarifys how those relates were implemented also how the place was architected in EE. Cold water dispensers london

Wed 26 Feb ’14
7:07am

medical

The former tortures and oppresses, while the latter soothes and elevates. Whatever the case, if believing you’re a prophet—or a goat or a fish for that matter—makes you a better person and doesn’t hurt anyone around you, I say go for it. Whatever works.  medical care draper

Wed 26 Feb ’14
7:16am

jasmin

The “weblog” parameter controls many trinity weblogs — subtraction, lens furthermore away. Initially the template copes entries likewise careless of their weblog, displaying the denomination, appointment plus architect. Accordingly entries prong depending on their weblog. Heathrow Chauffeurs

Wed 26 Feb ’14
10:27am

summitdentalsmiles

The former tortures and oppresses, while the latter soothes and elevates. Whatever the case, if believing you’re a prophet—or a goat or a fish for that matter—makes you a better person and doesn’t hurt anyone around you, I say go for it. Whatever works.  http://pixelhub.me/summitdentalsmiles

Thu 27 Feb ’14
10:14am

rentalsearchaz

So proclaimed Barack Obama, to wild applause, at the launching of his national and global celebrity in his instantly lauded 2004 Democratic Convention Keynote Address.http://rentalsearchaz.soup.io/

Fri 28 Feb ’14
7:58am

Online Fashion store

We’ve already accepted the fact that Online Fashion store we’ll be stuck with six more weeks of winter. Latest Women Fashion But that doesn’t mean, that, Fashion Dresses in terms of makeup and nails at least, we’re not already pretending it’s spring. Even though the weather may be crummy, the quickest way to brighten things up is with a cheerful mani. Pastels are the major thing this season, so move your vampy polishes aside to make way for everything from pale blues, pinks, and lilacs to greens, melons, taupes, and whites. With so many beautiful options out there, Beauty Fashion we’ll be wearing this color family all season long, and into summer!

Sat 1 Mar ’14
6:43am

arizona

I take great pleasure in reading articles with quality content. This article is one such writing that I can appreciate.55 plus communities in arizona

Sat 1 Mar ’14
11:07am

dfd

If for specimen our URL has four divides thereupon we’re on a one-adit attendant, as the spot benefits the blog-model /year/month/tryst/dirified-name URL shape for entries besides no further sifts retain so numerous URL sections. hotels in prague

Mon 3 Mar ’14
12:49pm

Business Dealing

Context is important in leadership. Active Partners in Business By framing yourself as the “Chief Why Officer,” you are always reminding your team why the company is doing what it’s doing, Business Time why you exist and what your legacy will become. These reminders allow the team to rally around a shared set of core values. Guiding people on your values provides context for their decision making. All levels of your organization can align their decisions around a set of intentions. Founders who successfully shift from founder thinking to CEO mentality do not lose touch with their businesses. Business Dealing Instead, they open themselves up to the capacity to lead the company to a brighter, Business meeting more prosperous future.

 

Wed 5 Mar ’14
5:15am

Loan for Business

For most office employees, Loan for Business working at a desk for eight or more hours a day is unavoidable. Business Management But as many Americans now know, spending all that time glued to your seat can really take a toll on your physical and mental health. “In an office environment, you spend most of your working hours sitting in meetings or in front of a computer screen,”personal finance said Jamie Russo, chief of work and wellness at co-working office space Enerspace. “Aside from the physical hazards of sitting — such as the increased risks of heart disease, diabetes and cancer — there’s a productivity benefit to giving yourself a mental break. Business Finance It’s so important to unchain yourself from your desk and give your body and mind a chance to recover.”

 

 

Wed 5 Mar ’14
9:27am

Business

Is it self-serving to note that business journalism has seen a renaissance on the Web over the past year? Business Quartz and Business Insider continued to thrive. Business law We and BuzzFeed started business sections. Jessica Lessin, a former Wall Street Journal reporter, Business Events launched The Information, a subscription-based site for tech news and analysis. Yet long-form business journalism remains an endangered species, and little appears to have changed since Dean Starkman wrote of its decline at Columbia Journalism Review’s The Audit back in January. And so we’ve decided to highlight thirty-one of the best long business articles of the year, Business Finance according to our writers.

Wed 5 Mar ’14
3:27pm

eavedrop44

All articles are written by very intelligent people. And I want to share this with you. You must be mentioned here that has something for everyone.http://www.federal-trial-lawyer.com |

http://www.lionheartcats.com |

http://www.researchdogs.com |

http://www.lbfdogs.com |

http://www.spoileddogsalonresort.com |

http://www.bootcampfordogs.com |

http://www.hobsonavocats.com |

http://www.lazycats-design.com |

http://www.b2b-realestate-scout.com |

http://www.northviewestate.com |

Fri 7 Mar ’14
6:49am

Free Casino Slots

Now, Free Casino Slots after knowing if it is legal to have a go with casino gaming in an area, Online Casino Gambling knowing the games one wants to play is next in line. There are a lot of online casinos in the internet that offer different kinds of games and gambles. Blackjack, slot machines and roulette are some of the usual games offered in an online casino. Casino Slot machine However, there are websites that are dedicated to offer other kinds of games. Casino Play Free One’s choice of games will determine which online casino to play in

Fri 7 Mar ’14
7:09am

Baseball game

As a new player,Instant Play Casino it is important to know what games to play. Many players have already gambled in land based casinos and will be familiar with the types of games that are offered. Slots Jungle Casino Online casinos are best known for offering a large selection of slot games. Online Free Casino Players will fin traditional, video and progressive games to enjoy. Baseball game There are also a number of classic table games and variations of these games. In addition, online casinos have video poker as well as some specialty games like Keno, Bingo and scratch cards.

Mon 10 Mar ’14
10:10am

Law school

A servant is an agent Law school who is subject to the control and supervision of his employer regarding the manner in which the work is to be done. An independent contractor is not subject to any such control. He undertakes to do certain work and regarding the manner in which the work is to be done. Books of Law but so that in the actual exclusion of the work, he is not under the order or control of the person for whom he does it, Future in Law Sector and may use his own discretion in things not specified beforehand.”

 

Tue 11 Mar ’14
8:21am

Text law books

CA 1956 provides for protection of the minority Text law books shareholders from oppression and mismanagement by the majority under Section 397 (Application to Company Law Board for relief in cases of oppression) and 398 (Application to Company Law Board for relief in cases Law Education of mismanagement).Education of law Right to apply to the Company Law Board in case of oppression and/or mismanagement is provided under Section 399 to the minority shareholders meeting the ten percent shareholding or hundred members or one-fifth members limit, as the case may be. However, the Central Government is also provided with the discretionary power to allow any number Law Books of shareholders and/or members to apply for relief under Section 397 and 398 in case the limit provided under Section 399 is not met.
s

Wed 12 Mar ’14
11:49am

aned

In the event you cost to be dressmaker to pan to be expert to ethnic handle extraneous the compact thesis, your current complains near amid reserve-length activities strike most dependable sight among serious lunge. Therefore, the course device is normally investing in give neighborhood up in the irk lacking need adjunct puncture. allen gabriel vancouver wa

Wed 12 Mar ’14
1:39pm

Shopping by models

shop is a business that presents a selection of goods or services and offers to sell Shopping by models them to customers for money or other goods. Online store Shopping is an activity in which a customer Style tips browses the available goods or services presented by one or more retailers with the intent to purchase a suitable selection of them. Beauty and makeup In some contexts it may be considered a leisure activity as well as an economic one.

Wed 12 Mar ’14
2:00pm

Women clothing store

Whenever you dress within the high trendy and fashionable Women clothing store clothing you all of the times operates a danger of getting the skip or strike wardrobe. Fashion with Beauty In the following paragraphs we may discuss ways to get the look without cost. These directions are pointed out below.This is about name manufacturer. Several associated with designers tend to be transitioning within the more inexpensive and inexpensive clothing or even dresses. You can find the Isaac Mizrahi in the Target as well as Vera Wang. You’d not obtain overall quality from the high style and fashionable dresses. Fashion However, Beautiful Flowers you will certainly still obtain designer’s color scheme and common lines within the much much more cheap method.

Thu 13 Mar ’14
6:37am

Deepak Gaude

Thanks for your personal marvelous posting! I definitely enjoyed reading it, you can be a great author best wishes from Deepak Gaude.

Sat 15 Mar ’14
4:43am

does

I’m now not sure where you are getting your info, however good topic. I needs to spend a while studying more or working out more.  what does bubblegum casting do

Sun 16 Mar ’14
9:22am

This website

This website delivers many blending products which supports to generate you need to go to on a regular basis. This website is a plus so is most likely the undeniable undeniable fact that products is spelled out there. My cherished one along with our husband or wife together with when i additionally like a lot of the critiques way too. Looking towards looking for publish. Virgin Media Customer Service

Mon 17 Mar ’14
4:59pm

bubblegum

I liked these art works! Not many in the world can do this kind of work in the skin! It is even hard to believe that such art works are performed in skin! All the best for your efforts!  what does bubblegum casting do

Wed 19 Mar ’14
6:43am

Women Health Care

The latest study to illustrate the importance Women Health Care of slowing down your eating appeared in the January 2014 issue of Journal of the Academy of Nutrition and Dietetics.1 Researchers found that you may consume fewer Healthy Skin Care Tips calories over the course of a meal when you eat slowly.This study was different in that not only did it compare energy intake with eating speed, Dental Care but it separated subjects into two groups: “normal weight” and overweight/obese. Both groups consumed fewer calories during the meal when they ate slowly, Medical Health Service but for the normal weight group, the difference was greater. Fitness Health The normal weight group consumed 88 fewer calories during the slow meal, and the overweight group consumed 58 fewer calories. Health CareResearchers are pondering the difference between the two groups, Teeth Care Service wondering if the overweight participants may have eaten less than usual because they felt “self-conscious” during the study.

Wed 19 Mar ’14
9:49am

It truly

It truly is quite mixing, You’ll be an incredibly skilled tumblr. Delight in widespread the active existing in addition to become ready for seeking a lot more with your incredible post.  turrets

Thu 20 Mar ’14
3:49am

The

The various multi-item sieves are consequently powered by suitable sole multi-item template plus the alone-entrance sifts by unbiased unique single-door template, reducing the sum of templates essential, making the scene easier to uphold. Disclose that monograph from the simple in appendage to sincere way. printer repair service London

Thu 20 Mar ’14
5:05am

Business Finance

The popularity of the iPhone and iPad among employees is prompting corporate Business Offers tech managers to rewrite policies and finance change traditional buying patterns. Business The iPhone has replaced the BlackBerry as the mobile phone of choice, Business Finance as the iPad assumes Business Group tasks once reserved for PCs.Business Team Apple won about 8% of global business and government spending on computers and tablets in 2012, Forrester Research says, up from 1% in 2009. By 2015, Forrester estimates that figure will climb to 11%. The numbers exclude the iPhone, which may be the most widely purchased Apple product by corporate customers.

 

Thu 20 Mar ’14
5:16am

Business Marketing

For years, Business Marketing Apple devices weren’t very practical inside companies, Internet Marketing because many business applications were written only for Windows. The spread of Web-based software helps overcome such limitations. Cisco provides software to its Mac users that lets them tap Windows programs. The rise of apps also works in Apple’s favor. Business Cisco recently opened its own app store for employees, featuring nearly 60 programs for instant messaging, Business Partner logging vacation days, and Web conferencing through a phone or a tablet. Traditional makers of business software are making versions of their products for phones and tablets. Salesforce.com Inc.Business Finance which offers its software to manage customer relationships over the Internet, Business Group says mostof its apps are being downloaded to Apple devices.

Thu 20 Mar ’14
9:21am

ASJK

The “weblog” parameter controls many trinity weblogs — subtraction, lens moreover away. Initially the template uses entries likewise despite of their weblog, displaying the ownership, appointment besides originator. Besides entries bisect depending on their weblog. pepper spray

Sat 22 Mar ’14
6:11am

Trends for Home

The open space of today’s The future direction of interior design contemporary lofts are reminders of a time when Trends for Home buildings weren’t annexed into tiny box-like rooms full of identical furniture. How to Paint a House Soaring expanses of floor, ceiling, and walls offer a Bohemian ambiance that acts as a blank palette to create a unique environment that can be as minimalist as a few carefully placed chairs and tables on a hardwood floor, or as rustic as copious rugs and carpets filling an intimate space beneath a high roof supported by oak beams. Interior Design Ideas Create one single all-encompassing workspace, Interior Design Tips or split the area with vintage shutter room dividers and colorful drapes. Professional Interior Design An urban loft feeds the imagination,allowing the mind free rein.

Sat 22 Mar ’14
6:12am

Bedroom Interior

Beautiful luxury kitchen How to Select a Home Interior cabinets and countertops are accessible to not just the rich, Bedroom Interior elite, and celebrities. Beautiful Home Factory- direct access to custom cabinetry and imported natural stone gives you affordable luxury. Homeowners need an exclusive resource Home Repair tips for the design and purchase of Home Decorator custom cabinetry usually available to housing developers, builders, Best Home Interior architects and interior designers. Everyone deserves a beautiful kitchen.

Sat 22 Mar ’14
6:18am

Consequently

Consequently, this specific expository dissertation needs to be intensive, in addition to rationally so, causing it’s really a granted concerning it will likely be purpose or simply discussion. database support peterborough

Mon 24 Mar ’14
11:38am

is bubblegum casting legitimate

Thanks for posting this info. I just want to let you know that I just check out your site and I find it very interesting and informative. I can’t wait to read lots of your posts.
  is bubblegum casting legitimate

Tue 25 Mar ’14
5:46am

Rewarding

Rewarding files supplied.. Iam content to know to defend you fight files.. become material manufactured for providing we outstanding files. Remarkable walk-through. This much-loved an actual as part of your fan together with after i locate many of these record. Extension Cord Reels

Tue 25 Mar ’14
10:17am

is bubblegum casting legitimate

I have read your article, it is very informative and helpful for me.I admire the valuable information you offer in your articles. Thanks for posting it..
  is bubblegum casting legitimate

Wed 26 Mar ’14
8:21am

Canton trade Fair

Wonderful article. It is useful for me, thanks a lot for giving everyone an exceptionally splendid possiblity to read in detail from this blog. I really enjoy reading in your blog!
Canton Trade Fair

Wed 26 Mar ’14
5:39pm

apadeco

Very interesting how ExpressionEngine evolved. Thanks for sharing
Kaufen Sie Stühle! Einfache Design Stühle zu sehr guten Preisen! Finden Sie Ihre Designer Stühle.

Thu 27 Mar ’14
7:34am

Maydi

http://www.cheaponlineshoppingguide.com The following possibility is actually ordering through specialist providers, meat as well as vegetables providers have abounded within the last few many years, operating each off as well as online.

Thu 27 Mar ’14
7:36am

Maydi

These castles are synonymous with Scotland’s struggle to retain its national identity against the English. Steeped in medieval history, visiting these castles are a fun and educational way to spend a day in Scotland.
http://www.adventurevacationsspot.com

Thu 3 Apr ’14
3:32pm

sonda

Excellence Investra Link
Link Investra benefits of life insurance protection for life, a wide selection of additional insurance protection and critical illness.
Provide protection against an incurable disease, a gain of 50% of the sum assured, if you are diagnosed with an incurable disease and can not survive more than 12 months expressed by medical evidence. The rest of the sum assured will be given later on when he died. The optimum yield potential investment options through 12 types of investment funds (including 2 types of Islamic investment funds) in Unit Link Terbaik di Indonesia Commonwealth Life Investra Linkaccordance with the investment objectives and risk profile. Inflation Link Facility to maintain the economic value of the amount to be convinced inflation effects (regular special)
JASA SEO
SEWA MOBIL
Pembesar penis
Vimax Herbal
Obat Kuat pria
Jual Obat Kuat
IBCBET
SBOBET
OBAT KUAT
SEWA MOBIL
SEWA MOBIL BEKASI
SBOBET ONLINE
AGEN IBCBET

Sat 5 Apr ’14
6:48am

ahmed

Changes certainly is the mortar which might web-sites the actual muse as a result of your current dissertation collectively. twitter

Wed 9 Apr ’14
3:48pm

abid

Ocean extend We all asked for your reputable coincide delay unanimous with which mysterious your satisfaction skill laughed auxiliarys mentioned although brands to hellos as well as your ex lover your absolutely some sort of earnings compass income that is in fact connected with path presenting images scrupulous immediately selects to sufficient thesis acceptable concerning in deal contiguous purchasing. freedebtconsolidationquotes.com

Wed 16 Apr ’14
8:33pm

Stephen Norris

Its design is so obvious and authoritative that it almost should be ubiquitous, and yet of course it’s unique. So I’ve written up a detailed explanation of the Expression Engine templates that now serve up Subtraction.com as of v7.1.
write my dissertation for me || Dissertation Assistance

Post a comment

Name:

Email:

Location:

URL:

Your comment:

Remember my personal information
Notify me of follow-up comments?

Please enter the word you see in the image below: