<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Advanced CSS Design Resources - last-child.com &#187; PHP</title>
	<atom:link href="http://www.last-child.com/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.last-child.com</link>
	<description>CSS Toys for Professional Web Developers</description>
	<lastBuildDate>Mon, 19 Dec 2011 18:30:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Add Pagination to your Yahoo! BOSS search engine</title>
		<link>http://www.last-child.com/pagination-boss-search-engine/</link>
		<comments>http://www.last-child.com/pagination-boss-search-engine/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 15:07:52 +0000</pubDate>
		<dc:creator>Ted</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Unordered List]]></category>
		<category><![CDATA[Yahoo!]]></category>
		<category><![CDATA[YUI]]></category>
		<category><![CDATA[Application programming interface]]></category>
		<category><![CDATA[Cross Site Scripting]]></category>
		<category><![CDATA[Design pattern]]></category>
		<category><![CDATA[Web search engine]]></category>

		<guid isPermaLink="false">http://www.last-child.com/?p=161</guid>
		<description><![CDATA[Yahoo&#8217;s BOSS search API makes it easy for you to create a customized search engine. Yahoo! also has a Design Pattern lLibrary to save time designing your pages. They&#8217;ve put a lot of effort into creating the best user experience for search pagination. Pagination guidelines Here&#8217;s a sample of the Design Library&#8217;s ideas for search [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://developer.yahoo.com/ypatterns/pattern.php?pattern=searchpagination"><img src="http://developer.yahoo.com/ypatterns/images/ysearch-page7.png" alt="Search pagination example"></a><a href="http://developer.yahoo.com/search/boss">Yahoo&#8217;s BOSS search API</a> makes it easy for you to create a customized search engine. Yahoo! also has a <a href="http://developer.yahoo.com/ypatterns/index.php">Design Pattern lLibrary</a> to save time designing your pages. They&#8217;ve put a lot of effort into creating the best user experience for <a href="http://developer.yahoo.com/ypatterns/pattern.php?pattern=searchpagination">search pagination</a>. </p>
<h3>Pagination guidelines</h3>
<p>Here&#8217;s a sample of the Design Library&#8217;s ideas for search pagination.</p>
<blockquote cite="http://developer.yahoo.com/ypatterns/pattern.php?pattern=searchpagination">
<ul>
<li>Display the navigation controls as a row of links.</li>
<li>Present links in the following order: &#8216;Prev&#8217;, page links, &#8216;Next&#8217;.</li>
<li>Display a left arrow after the label &#8216;Prev&#8217;.</li>
<li>Display a right arrow before the label &#8216;Next&#8217;.</li>
<li>Make the arrow(s) clickable.</li>
<li>The page links should contain a maximum set of 10 page links. If fewer pages of results exist, only show page links for the available pages.</li>
<li>When on pages 1-6, the page links should always start at &#8217;1&#8242;.</li>
</ul>
<p><cite><a href="http://developer.yahoo.com/ypatterns/pattern.php?pattern=searchpagination">Search Pagination</a></cite>
</p></blockquote>
<p>The rationale for these rules is also interesting: </p>
<blockquote>
<ul>
<li>Displaying arrow graphics helps differentiate the links and provides larger click targets.</li>
<li>Disabled controls add little value in this context since
<ul>
<li>These links often appear blow the fold.</li>
<li>The first page of results makes up the vast majority of pageviews. Displaying a disabled &#8220;previous&#8221; control on all of these is of little added value.</li>
<li>Although a &#8220;First&#8221; link has value, it competes with the functionality presented in the random-access links. </li>
<li>The &#8220;Last&#8221; link is of little value as the results are sorted by relevance.  This is is also problematic since the total number of results (and therefore, the last result) may not be known. </li>
</ul>
</li>
</ul>
</blockquote>
<h3>Add this pagination style to your search engine</h3>
<p>See the final result on <a href="http://v3ggie.com/">V3GGIE.com</a>: <a href="http://v3ggie.com/recipes/vegetarian+enchiladas.html">Vegetarian Enchiladas Recipes</a></p>
<p>Most <a href="http://php.net/" title="PHP" rel="homepage" class="zem_slink">PHP</a> pagination tutorials assume you are pulling content from a database. <a href="http://ascaniocolonna.com/en/">Ascanio Colonna</a> created a <a href="http://blog.ascaniocolonna.com/?p=12">good tutorial on building pagination</a> with PHP that is agnostic to the data source. I&#8217;ve taken his code and modified it to match the Yahoo Design Pattern. I&#8217;ve also added the suggested <a href="http://developer.yahoo.com/yui/container/module/index.html">YUI Module markup</a> to stay consistent with the <a href="http://developer.yahoo.com/yui/grids/">YUI Grids</a> and any future YUI javascript.</p>
<p>
The pagination.php file includes a function that creates the module. You&#8217;ll need to call this function from your results page with a series of parameters. These are easy to populate from the BOSS interface. It&#8217;s worth noting that I am ignoring the BOSS next/last page nodes in the web service and prefer to build my own urls.</p>
<h3>The Pagination Code</h3>
<p>
Lets&#8217; start by looking at the code inside your results.php file. This will call the pagination function and pass the desired parameters.</p>
<p><code lang="PHP"><br />
if(!empty($searchQuery))<br />
  {<br />
	require '/include/pagination.php';<br />
  if(isset($_REQUEST['page'])) {<br />
	$page = $_REQUEST['page'];<br />
	} else  {<br />
	$page = '1';<br />
	}<br />
	$limit = $count;<br />
	$targetpage = 'results.php';<br />
	$pagestring = '?page=';<br />
	$summary_name = 'articles';<br />
	$placement = 'summary';<br />
	// start pagination<br />
	  echo getPaginationString($page, $totalhits, $limit,  $targetpage, $pagestring, $summary_name, $placement);<br />
 }<br />
</code></p>
<h4>Here&#8217;s what you are working with:</h4>
<dl>
<dt> require &#8216;/include/pagination.php&#8217;</dt>
<dd>Where does the pagination file sit on your server</dd>
<dt>$page logic</dt>
<dd>First look to see if there is page=x in the url. If so, $page = x, if not, you are on page 1.</dd>
<dt>$limit</dt>
<dd>How many results will appear on the page</dd>
<dt>$targetpage</dt>
<dd>what is the name of your results page? index.php, results.php?</dd>
<dt>$pagestring</dt>
<dd>I tried to minimize this to ?p= but couldn&#8217;t track down why it didn&#8217;t work. I&#8217;ve left it at the default ?page=&#8230;</dd>
<dt>$summary_name</dt>
<dd>This is what appears in the text &#8220;xxx (summary_name) results. This is not used in the Yahoo Design Library</dd>
<dt>$placement</dt>
<dd>You&#8217;ll probably want to use summary. This function also allows &#8220;footer&#8221; for a simplified output</dd>
<dt>echo getPaginationString(&#8230;)</dt>
<dd>Send the information to the function and display the results in the page.</dd>
</dl>
<hr />
<h3>Important Update!</h3>
<p>The original code I posted had a serious security flaw. You should never output user&#8217;s input directly into your page. I had something like this href=&#8221;?query=$_REQUEST['query']&#8220;. This allows all sorts of <a href="http://en.wikipedia.org/wiki/Cross-site_scripting" title="Cross-site scripting" rel="wikipedia" class="zem_slink">Cross Site Scripting</a> attacks. You must urlencode any text that comes from a user. This is safe: urlencode($_REQUEST['query']).</p>
<p>I apologize if anyone has used this code, as I wrote it on their site. They should immediately update the logic. -Ted</p>
<hr />
<h3>The pagination function</h3>
<p>
I have streamlined the original code from Asconio, as he was tying into pre-existing facebook styles. This code is for your unique web site. It&#8217;s also worth noting I use rewrite rules to make my search result page urls more friendly, i.e. /corn.html instead of /result.php?q=corn</p>
<p><code lang="PHP"><br />
<?php </p>
<p>//text strings in strings.php</p>
<p>function getPaginationString($page = 1, $totalitems, $limit = 15, $targetpage = '/', $pagestring = '?page=', $summary_name = 'items', $placement = 'summary',$safeQuery)<br />
{</p>
<p>$countnum = '15';</p>
<p>	// inurl or intitle<br />
	// it should only be three digits long, int, inu, or nox anything else could be a vulnerability<br />
	//int=intitle, inu=inurl, nox=no setting<br />
	if (isset($_REQUEST['inx']) &#038;&#038; strlen($_REQUEST['inx']) == 3){<br />
	$inxv = $_REQUEST['inx'];<br />
	}<br />
	else {<br />
	$inxv = '';<br />
	}</p>
<p>	// type of query<br />
	// request type should only be 2 chars, if not we are dealing with an xss attack<br />
	// type options: rc, lo, ve... these represent recipes, local, buzz for insider sites.<br />
	if (!empty($_REQUEST['t']) &#038;&#038; strlen($_REQUEST['t']) <= 2) {<br />
		$tid = $_REQUEST['t'];<br />
	}<br />
	else{<br />
	$tid = 've';}<br />
// count should only be a number. don't allow text for xss protection<br />
if (!empty($_REQUEST['count'])) {<br />
	$countnum = number($_REQUEST['count']);<br />
	$limit = $countnum;<br />
}<br />
	// DEFAULTS<br />
	$adjacents = 10;<br />
	//$targetpage = .'.html';<br />
	// VARS<br />
	if(substr($pagestring, 0, 1) != '?') $pagestring = '?' . $pagestring; // If query string is lacking start, add it<br />
	if(substr($pagestring, strlen($pagestring) - 5) != 'page=') $pagestring .= '&#038;page='; // If query string is lacking page var, add it<br />
	$prev = $page - 1;<br />
	$next = $page + 1;<br />
	$firstpage = 1;<br />
	$lastpage = ceil($totalitems / $limit);<br />
	$fiop = ($limit * $page) - $limit + 1; //# of first item displayed in current page<br />
	$liop = min($limit * $page, $totalitems); //# of last item displayed in current page<br />
	$searchstring = "&amp;t=$tid&amp;inx=$inxv";<br />
	$nicetotal = number_format($totalitems);</p>
<p>	/*<br />
		DRAW PAGINATOR<br />
	*/</p>
<p>	// Give it the right class (the footer paginator has no summary and the current page has a different gfx)<br />
	if($placement == 'summary')<br />
		$type = 'summary';<br />
	else<br />
		$type = 'footer';</p>
<p>	// Draw summary<br />
	if($placement == 'summary')<br />
		$pagination .= "
<div class=\"summary hd\">
<h4>$string_results_page</h4>
</div>
<p>";</p>
<p>	if($lastpage > 1) // Paginator page selection is drawn only if more than 1 pages are there<br />
	{	</p>
<p>		$pagination .= '
<div class="bd">
<ul>';</p>
<p>		// First page selector<br />
		if ($page > 2) </p>
<p>		// Previous page selector<br />
		if ($page > 1)<br />
			$pagination .= "
<li class=\"prevlink\"><a href=\"$safeQuery.html$pagestring$prev$searchstring\">$string_next</a></li>
<p>";	</p>
<p>		// Page selectors<br />
		if ($page < 4)	//not enough pages to bother<br />
		{<br />
			for ($counter = 1; $counter <= min(5, $lastpage); $counter++)<br />
			{<br />
				if ($counter == $page)<br />
					$pagination .= "
<li class=\"current\"><strong>$counter</strong></li>
<p>";<br />
				else<br />
					$pagination .= "
<li><a href=\"$safeQuery.html$pagestring$counter$searchstring\">$counter</a></li>
<p>";<br />
			}<br />
		}<br />
		elseif ($page > $lastpage - 3)<br />
		{<br />
			for($counter = $lastpage - min(5, $lastpage); $counter <= $lastpage; $counter++)<br />
			{<br />
				if ($counter == $page)<br />
					$pagination .= "
<li class=\"current\"><strong>$counter</strong></li>
<p>";<br />
				else<br />
					$pagination .= "
<li><a href=\"$safeQuery.html$pagestring$counter$searchstring\">$counter</a></li>
<p>";<br />
			}<br />
		}<br />
		else<br />
		{<br />
			for($counter = $page - 2; $counter <= $page + 2; $counter++)<br />
			{<br />
				if ($counter == $page)<br />
					$pagination .= "
<li class=\"current\"><strong>$counter</strong></li>
<p>";<br />
				else<br />
					$pagination .= "
<li><a href=\"$safeQuery.html$pagestring$counter$searchstring\">$counter</a></li>
<p>";<br />
			}<br />
		}</p>
<p>		//next button<br />
		if ($page < $lastpage)<br />
			$pagination .= "
<li class=\"nextlink\"><a href=\"$safeQuery.html$pagestring$next$searchstring\">$string_next</a></li>
<p>";</p>
<p>		//last button<br />
		if ($page < $lastpage - 1) </p>
<p>		$pagination .= '</ul>
</div>
<p>';<br />
	}</p>
<p>	$pagination = "
<div class=\"pagelinks \">$pagination</div>
<p>";</p>
<p>	return $pagination;</p>
<p>} ?></p>
<p><?php</p>
<p>//This allows user to easily try the search with different options</p>
<p>// strings are translated defined in separate file for localization<br />
//$string_try_diff_type   = "Try a different type of search";<br />
//$string_try_diff_header = "Didn't find what you were looking for?";<br />
//$string_try_inx         = "Try searching for $safeQuery only in page titles";</p>
<p>function trySomethingelse($safeQuery, $searchQuery, $inx, $tid,$string_try_diff_header, $string_try_diff_type, $string_try_inx, $string_buzz_tab, $string_local_tab,$string_recipes_tab){<br />
if($inx==''){<br />
$tryinx = "
<li><a href=\"/$safeQuery.html?inx=int\">$string_try_inx</a>";<br />
}<br />
$trydiff='';<br />
switch ($tid){<br />
case "rc":<br />
$trydiff = "</p>
<li>$string_try_diff_type <a href=\"/$safeQuery.html?t=lo\">$string_local_tab</a> or<br />
<a href=\"/$safeQuery.html?t=ve\">$string_buzz_tab</a>";<br />
break;<br />
case "lo":<br />
$trydiff = "</p>
<li>$string_try_diff_type <a href=\"/$safeQuery.html?t=rc\">$string_recipes_tab</a> or<br />
<a href=\"/$safeQuery.html?t=ve\">$string_buzz_tab</a>";<br />
break;<br />
default:<br />
$trydiff = "</p>
<li>$string_try_diff_type <a href=\"/$safeQuery.html?t=rc\">$string_recipes_tab</a> or<br />
<a href=\"/$safeQuery.html?t=lo\">$string_local_tab</a>";<br />
}</p>
<p>?></p>
<div class="different mod">
<div class="hd"><?php print $string_try_diff_header ;?></div>
<div class="bd">
<ul>
<?php<br />
print 	$tryinx;<br />
print  	$trydiff;<br />
?></p>
</ul>
</div>
</div>
<p><?php<br />
}<br />
?></p>
<p></code></p>
<p>
I&#8217;ve added a few classes to the final output. The previous and next links have class&#8221;nextlink&#8221; or class=&#8221;prevlink&#8221;. The current page has the number within a strong tag with class=&#8221;current&#8221;. Finally, the parent module has class=&#8221;pagelinks mod&#8221;. This makes it pretty simple to style</p>
<h4>Pagination CSS</h4>
<p>I&#8217;m using the YUI Sam Skin sprite for the tabbed search box. I&#8217;ve added a couple arrows to this sprite for my search pagination. </p>
<p><code lang="CSS"><br />
.pagelinks {<br />
text-align:center;<br />
border:1px solid #ccc;<br />
padding:5px 0 0 0;<br />
}<br />
.pagelinks ul li {<br />
display:inline;<br />
}<br />
.pagelinks ul a, .pagelinks ul strong {<br />
display;block; padding:3px 5px;<br />
}<br />
.pagelinks ul strong {<br />
background-color:green; color:#fff;<br />
}<br />
.pagelinks li.nextlink a,.pagelinks li.prevlink a  {<br />
padding-right:15px; font-size:120%; font-wieght:bold; background:url(/images/sprite.png) no-repeat 100% -1943px;<br />
}<br />
.pagelinks li.prevlink a {<br />
padding-right:0px; padding-left:15px; background-position:0 -1973px;<br />
}<br />
</code></p>
<p>
I am also not a PHP expert and welcome suggestions on improving the code.</p>
<h3>Download files</h3>
<ul>
<li><a href="http://www.last-child.com/pagination.txt">Pagination functionality for a BOSS site (.txt)</a> &#8211; the php code and sample to insert the pagination.</li>
</ul>
<h3>Related articles by Zemanta</h3>
<ul class="zemanta-article-ul">
<li class="zemanta-article-ul-li"><a href="http://chris.pirillo.com/2008/09/11/are-you-tired-of-the-same-old-search-engine/">Are You Tired of the Same Old Search Engine?</a></li>
<li class="zemanta-article-ul-li"><a href="http://lifehacker.com/5046701/buildasearch-combines-multiple-site-seaches-into-one-box">Buildasearch Combines Multiple Site Seaches into One Box [Search]</a></li>
<li class="zemanta-article-ul-li"><a href="http://www.last-child.com/create-search-yahoo-boss/">Create your own Search Engine with Yahoo! BOSS</a></li>
<li class="zemanta-article-ul-li"><a href="http://blog.programmableweb.com/2008/09/11/5-best-practices-for-mashups/">5 Best Practices for Mashups</a></li>
<li class="zemanta-article-ul-li"><a href="http://blog.programmableweb.com/2008/09/11/5-best-practices-for-mashups/">5 Best Practices for Mashups</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.last-child.com/pagination-boss-search-engine/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Create your own Search Engine with Yahoo! BOSS</title>
		<link>http://www.last-child.com/create-search-yahoo-boss/</link>
		<comments>http://www.last-child.com/create-search-yahoo-boss/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 20:38:41 +0000</pubDate>
		<dc:creator>Ted</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Online Resource]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Yahoo!]]></category>
		<category><![CDATA[YUI]]></category>
		<category><![CDATA[Application programming interface]]></category>
		<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[Web search engine]]></category>
		<category><![CDATA[Yahoo Boss]]></category>

		<guid isPermaLink="false">http://www.last-child.com/?p=158</guid>
		<description><![CDATA[Yahoo! recently launched BOSS, which opened their search platform to developers around the world. They didn&#8217;t just create an API to access data. That has been around for a while. Yahoo! has opened the data to developers with no limits on requests, no restrictions of icon use, results display, or even the need to let [...]]]></description>
			<content:encoded><![CDATA[<p>
    Yahoo! recently launched <a href="http://developer.yahoo.com/search/boss/" title="Build Own Search Service">BOSS</a>, which opened their search platform to developers around the world. They didn&#8217;t just create an API to access data. That has been around for a while. Yahoo! has opened the data to developers with no limits on requests, no restrictions of icon use, results display, or even the need to let people know the search engine is Yahoo! based.</p>
<p>   <a href="http://developer.yahoo.com/search/boss"><img src="http://l.yimg.com/a/i/ydn/boss/boss_info4.gif" alt="Yahoo BOSS plus your special sauce equals search innovation" class="plainimage" /></a> </p>
<p>
    This open approach lets anyone build a search engine to their particular skills, mash the data with other sources, re-arrange results, or any other novel idea for the next king of search.  You could also use BOSS to add search capabilities to a pre-existing site, limiting the resuts to just its data.</p>
<p>
    Why is Yahoo! doing this? It&#8217;s a brash approach to push search beyond its current status of pages with ordered sets of links You can let your imagine fly with the only cost being your personal development investment.  I recently took this challenge and decided to build a search engine for vegetarians.</p>
<h3>V3GGIE &#8211; A Vegetarian Search Engine</h3>
<p>My goals were simple:</p>
<ol>
<li>Create a simple site that could be copied easily as a proof of concept for other genres. Document the construction for others to explore.      </li>
<li>Keep it fast with minimal javascript and images      </li>
<li>Use as much Yahoo infrastructure as possible to minimize development time      </li>
<li><strong>Most importantly:</strong> return information relevant to the niche audience: Vegetarians and Vegans.
</li>
</ol>
<p>I&#8217;m not a PHP expert and some of my code is crude. I hope to clean it up and add a number of features to enhance performance and usability. However, the code samples will still be useful to the PHP beginner. More advanced PHP programmers could easily see where they&#8217;d take the concepts and improve on them.</p>
<h3>Set up the basic structure</h3>
<p><a href="http://v3ggie.com">V3ggie</a> has a basic workflow, there&#8217;s an input and result page. Arguably, this should only be one page which displays the original landing and subsequent results. I have separated them as I hope to create extra content that is appropriate to either the landing or results pages. </p>
<p>Further, there are several search engines built into this site. Each has a specific set of resources to fine tune the results. Currently, these are built with subdirectories (/recipes/, /blogs/, /news/, /local/ ). Each subsection includes   index and result pages. This could be changed by utilizing rewrite rules. I&#8217;ve kept it simple for now.</p>
<h3>Setup the Resources</h3>
<p>The <a href="http://developer.yahoo.com/search/boss/">BOSS API</a> allows you to create a query param with a list of domains to search through. This is the easiest way to fine tune your results. For instance, the <a href="http://v3ggie.com/recipes/">V3ggie recipe search page</a> uses a list of vegetarian cooking sites as well as the vegetarian subdirectories of <a href="http://epicurious.com">Epicurious</a> and FoodNetwork. </p>
<p><a href="http://technorati.com">Technorati</a> is the source for blog buzz. V3ggie searches through blogs tagged with &#8220;vegetarian&#8221; and/or &#8220;vegan&#8221;. This helps get the vegetarian viewpoint for any subject.</p>
<p>You have complete freedom to mash the data as much as you like. You could take the search results and mix them with other data, such as the page rank for a result page, the company or product&#8217;s appearance on <a href="http://wikipedia.org">wikipedia</a>, or perhaps data you&#8217;ve stored in your own databases. I can imagine creating an internal product search page that cross-references the results with a list of preferred vendors to encourage employees to purchase supplies from the correct vendor.</p>
<h3>Setup the Platform</h3>
<p>V3ggie is built from <a href="http://developer.yahoo.com/php/">PHP</a>. However, Yahoo! has also provided a python platform, the <a href="http://developer.yahoo.com/search/boss/mashup.html">BOSS Mashup Framework</a>, for building sites very quickly. You can combine this with the <a href="http://code.google.com/appengine/">Google App Engine</a> to create a custom search engine in a short time. <a href="http://4hoursearch.com">Four Hour Search</a>, formally known as <strong>Yuil</strong>, is such an example. It got its name from the length of time it required to research a domain name, setup Google Apps, and build the final search web site. Personally, I spent more than 4 hours trying to get Google Apps set up and I really didn&#8217;t want to learn yet another language (python). </p>
<h3>YUI on the frontend</h3>
<p>The <a href="http://developer.yahoo.com/yui">Yahoo! User Interface library</a> handles the tedious, basic formatting of a page. The <a href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets" title="Cascading Style Sheets" rel="wikipedia" class="zem_slink">CSS</a> libraries allow you to create a wide variety of page grids, standardize the fonts, reset browser inconsistencies and establish a common look and feel. </p>
<p>I started the project by using the <a href="http://developer.yahoo.com/yui/grids/builder/">CSS Grid Builder</a>. This easy to use tool sets up the page with the desired columns and includes the base css files. I then added the YUI Base CSS file. This takes the plain page and re-establishes the margins and font-styles for a basic site. These two CSS files will remove 75% of the CSS you would normally have to write for a site. Now you can concentrate on what makes your site special.</p>
<p>I also wanted to offer different seach options from a single interface. Once again, I used the <a href="http://developer.yahoo.com/yui/tabview/">YUI TabView</a> package. This combination of CSS and JS allows you to create a semantic set of links and corresponding series of div wrapped objects. YUI Tab View will turn this into the tabbed interface that even has built in ARIA support for screen readers.</p>
<p>I had some trouble getting the tabs to look correct. The documentation does not make it very clear that  tab links must have an em within the links to get the proper look and feel. I also downloaded the preferred sprite and used fireworks to change the tab color gradients from blue to green. </p>
<p>Yahoo also provides a <a href="http://developer.yahoo.com/ypatterns/">design pattern library</a>. This helped me configure my pagination links. Yahoo has spent a lot of time with user testing to make sure things are easy to use.</p>
<h3>Create your own search engine</h3>
<p>So, what are you wating for? Visit the <a href="htp://developer.yahoo.com">Yahoo Developer Network</a> and start by signing up and getting a application key. I will write separate posts that describe how to build various components of the page. I&#8217;m looking forward to hearing from better PHP programmers on how to improve the code.</p>
<h6 class="zemanta-related-title" style="font-size: 1em;">Related articles by Zemanta</h6>
<ul class="zemanta-article-ul">
<li class="zemanta-article-ul-li"><a href="http://www.saurabhsahni.com/2008/08/natural-language-image-search-with-boss-and-app-engine/">Natural Language Image Search with Yahoo Boss and Google App Engine</a></li>
<li class="zemanta-article-ul-li"><a href="http://www.techcrunch.com/2008/08/04/yahoo-boss-is-so-open-it-runs-on-googles-app-engine/">Yahoo Boss Is So Open, It Runs on Google&#8217;s App Engine</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.last-child.com/create-search-yahoo-boss/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Multiple asides categories in WordPress?</title>
		<link>http://www.last-child.com/multiple-asides-categories-in-wordpress/</link>
		<comments>http://www.last-child.com/multiple-asides-categories-in-wordpress/#comments</comments>
		<pubDate>Sun, 09 Mar 2008 19:44:25 +0000</pubDate>
		<dc:creator>Ted</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[YUI]]></category>
		<category><![CDATA[Templates]]></category>
		<category><![CDATA[Weblogs]]></category>
		<category><![CDATA[Yahoo!]]></category>

		<guid isPermaLink="false">http://www.last-child.com/multiple-asides-categories-in-wordpress/</guid>
		<description><![CDATA[I&#8217;m working on a new theme for WordPress. It&#8217;s a generic theme that I hope will make it easier to build multiple business sites in the future. Part of the goal is integrating the Yahoo! YUI library into the superb K2 theme. I&#8217;ve come across a problem that should be easy to solve. WordPress allows [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m working on a new theme for <a href="http://wordpress.org">WordPress</a>. It&#8217;s a generic theme that I hope will make it easier to build multiple business sites in the future. Part of the goal is integrating the <a href="http://developer.yahoo.com">Yahoo! YUI library</a> into the superb<a href="http://getk2.com"> K2</a> theme. </p>
<p>I&#8217;ve come across a problem that should be easy to solve. <a href="http://wordpress.org/" title="WordPress" rel="homepage" target="_blank" class="zem_slink">WordPress</a> allows you to create a category whose posts are displayed differently than other category posts. These &#8220;asides&#8221; are short posts that appear in the side bar and not in the main body of the blog. This functionality is baked into the latest versions of WordPress and the K2 theme&#8217;s admin screen makes it really easy to use.</p>
<p>However, I need to add a second variation of the asides. I want to create a new landing page with three promo spots just below the topnav. This branding section would allow the site to highlight important features, promos, sales, or blog posts. This could be done with asides, however I don&#8217;t want to lose the functionality of asides in the blog section.</p>
<h3>Asides become Promos</h3>
<p>I&#8217;ve started by cloning the asides module and functionality and creating a new set of functions (promos). The admin screen now allows you to choose a category that will be defined as a promo. Everything seems to be working until you get to the blog post page. Blog posts labeled as the asides category appear as they should.</p>
<p>However, the promos category and promo posts are not following the aside functionality. I&#8217;ve looked at the loop to see where it excludes the asides category and can&#8217;t find it. I can&#8217;t find the &#8220;the_post()&#8221; function, which may be the source of the issue. I would assume that the promos module is telling the_post that &#8220;promos&#8221; category is special and these posts should not be included in the loop, nor in the category list. </p>
<h3>help?</h3>
<p>Have you worked with the asides functionality in WordPress? Do you have any suggestions? I&#8217;ll post a summary when I get the solution figured out.</p>
<h3>Resources</h3>
<p>Here&#8217;s a list of related web pages that include information but haven&#8217;t answered my questions.</p>
<ul>
<li><a href="http://codex.wordpress.org/The_Loop">WordPress Codex: The Loop</a></li>
<li><a href="http://codex.wordpress.org/Function_Reference/WP_Query">WP_Query function reference</a></li>
<li><a href="http://wordpress.org/support/topic/119459">1 post, 3 asides on front page support question</a></li>
<li><a href="http://codex.wordpress.org/Adding_Asides">Adding Asides</a></li>
</ul>
<h3>Updates</h3>
<p>The above link for <a href="http://codex.wordpress.org/The_Loop">the loop</a> has some interesting information on multiple loops within one page. I&#8217;m going through the examples for some answers. Here&#8217;s a snippet of the post:</p>
<blockquote>
<h4> Loop Examples</h4>
<p>Below are two examples of using multiple loops. The key to using multiple loops is that $wp_query can only be called once. In order to get around this it is possible to re-use the query by calling rewind_posts() or by creating a new query object. This is covered in example 1. In example 2, using a variable to store the results of a query is covered. Example 3 documents the use of the update_post_caches(); function to avoid common plugin problems. Finally, ‘multiple loops in action’ brings a bunch of ideas together to document one way of using multiple loops to promote posts of a certain category on your blog’s homepage.<br />
<cite><a href="http://codex.wordpress.org/The_Loop">WordPress Codex: The Loop</a></cite>
</p></blockquote>
<h3>Updated: the solution</h3>
<p>During my initial modification of the files, I missed an important line that tells the loop to honor a new filter. So, if you want to duplicate the asides functionality with a new category, add this new section to wordpress/wp-content/themes/k2/app/includes/info.php<br />
<code lang="PHP"><br />
function k2promos_filter($query) {<br />
	global $k2sbm_current_module;<br />
	$promos = get_option('k2promoscategory');<br />
	// Only filter when it's in the homepage<br />
	if ( ($promos != 0) and ($query-&gt;is_home) and (!$k2sbm_current_module) and</p>
<p>		( (function_exists('is_active_module') and is_active_module('promos_module')) or<br />
		  (function_exists('is_active_widget') and is_active_widget('k2_promos_widget')) ) ) {<br />
                $priorcat = $query-&gt;get('cat');<br />
		if ( !empty($priorcat) ) {<br />
			$priorcat .= ',';<br />
		}<br />
		$query-&gt;set('cat', $priorcat . '-' . $promos);<br />
	}<br />
	return $query;<br />
}<br />
// Filter to remove promos from the loop<br />
add_filter('pre_get_posts', 'k2promos_filter');<br />
</code><br />
In a fit of cleverness, I changed the naming convention on my promos from promos_sidebar_module to promos_module. This threw my code off for a while.</p>
<p>This is the rough draft of my promos.php file that sits in wordpress/wp-content/themes/k2/app/modules/promos.php<br />
<code lang="PHP"></p>
<div class="bd">
have_posts() ):<br />
		$promos-&gt;the_post();<br />
?&gt;</p>
<div class="&lt;?php k2_post_class($promos_count++, true); ?&gt;">
<p>',''); ?&gt;
</p></div>
</div>
<p><label for="promos-module-num-posts"></label><br />
<input id="promos-module-num-posts" name="promos_module_num_posts" value="&lt;?php echo(sbm_get_option('num_posts')); ?&gt;" size="2" type="text"></p>
<p> 3));<br />
register_sidebar_module_control('Promos', 'promos_module_control');<br />
?&gt;</p>
<p></code></p>
<p>There are also some changes in the options.php file and sbm section. Do a search for asides and start replacing with your new function, i.e. promos.</p>
<h3>Remove the categories from latest posts and categories modules</h3>
<p>The next step in this process was to make sure the promos category (and asides) don&#8217;t appear in the category and latest posts modules. These two modules sit inside the /k2/app/modules/ folder. They also use similar logic. We need to create a comma delimited list of categories to exclude from the functions that build the appropriate lists. </p>
<p>This code checks for aside and promos categories. It then creates a comma separator and then combines the categories into a string, i.e. &#8220;12,13&#8243;<br />
<code lang="PHP"><br />
global $k2sbm_current_module;</p>
<p>$promos = get_option('k2promoscategory');<br />
$asides = get_option('k2asidescategory');<br />
/* lets create a new variable, excludes and use this to populate the exclude=foo parameter.*/<br />
$excludes = "";<br />
if ( ($asides != 0) or ($promos != 0 )) {<br />
$separator = (($asides!=0)&amp;&amp;($promos!=0)) ? "," : "";<br />
$excludes = $asides . $separator . $promos;<br />
}</p>
<p></code></p>
<p>For the latest posts, we&#8217;ll need to create a slightly different string. We need to create a parameter and add a negative sign to each category</p>
<p><code lang="PHP"><br />
$excludes = '-' . $asides . $separator . '-' . $promos;<br />
</code><br />
actually, this is bad logic, I need to only add the &#8211; if the category exists. That&#8217;s what is great about blogging your code. You realize your mistakes before it is too late.</p>
<p>Finally, we use that excludes variable in the logic to hide the categories, for example (categories.php)<br />
<code lang="PHP"><br />
wp_list_categories('title_li=&amp;show_count=1&amp;hierarchical=0&amp;exclude=' . $excludes);<br />
</code></p>
<p>These snippets assume you do not want to include your asides posts into the latest posts and categories modules. you can simplify the code if you only want to exclude the promos.</p>
<ul class="zemanta-article-ul" >
<li class="zemanta-article" ><a title="Open in new window" href="http://performancing.com/wordpress-tips/wordpress-hacks-upgrading-versions">WordPress Hacks: Upgrading Versions</a> [via&nbsp;Zemanta]</li>
<li class="zemanta-article"><a title="Open in new window" href="http://www.blogherald.com/2008/03/26/wordpress-wednesday-news-wordpress-25-due-any-day-beta-2-released-many-plugins-updated-wordcamp-dallas-this-weekend-wordcamp-uk-suggested-and-more/">WordPress Wednesday News: WordPress 2.5 Due Any Day, Beta 2 Released, Many Plugins Updated, WordCamp Dallas This Weekend, WordCamp UK Suggested, and More</a> [via&nbsp;Zemanta]</li>
<li class="zemanta-article" ><a title="Open in new window" href="http://www.techcrunch.com/2008/03/27/a-content-suggestion-engine-for-blogging-that-could-work/">A content suggestion engine for blogging? That could work&#8230;</a> [via&nbsp;Zemanta]</li>
</ul>
</fieldset>
]]></content:encoded>
			<wfw:commentRss>http://www.last-child.com/multiple-asides-categories-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VI is driving me crazy</title>
		<link>http://www.last-child.com/vi-is-driving-me-crazy/</link>
		<comments>http://www.last-child.com/vi-is-driving-me-crazy/#comments</comments>
		<pubDate>Mon, 11 Jun 2007 21:09:51 +0000</pubDate>
		<dc:creator>Ted</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.last-child.com/vi-is-driving-me-crazy/</guid>
		<description><![CDATA[&#60;rant>VI sucks! It is absolutely driving me crazy. It&#8217;s like writing code by smashing your head against the keyboard with a blind fold. &#60;/rant>]]></description>
			<content:encoded><![CDATA[<p>&lt;rant><a href="http://en.wikipedia.org/wiki/Vi"><abbr title="A screen-oriented text editor computer program">VI</abbr></a> sucks! It is absolutely driving me crazy. It&#8217;s like writing code by smashing your head against the keyboard with a blind fold. &lt;/rant></p>
]]></content:encoded>
			<wfw:commentRss>http://www.last-child.com/vi-is-driving-me-crazy/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Set up Dreamweaver to color code alternate file types</title>
		<link>http://www.last-child.com/set-up-dreamweaver-to-color-code-alternate-file-types/</link>
		<comments>http://www.last-child.com/set-up-dreamweaver-to-color-code-alternate-file-types/#comments</comments>
		<pubDate>Fri, 13 Apr 2007 18:08:01 +0000</pubDate>
		<dc:creator>Ted</dc:creator>
				<category><![CDATA[Dreamweaver]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Yahoo!]]></category>

		<guid isPermaLink="false">http://www.last-child.com/set-up-dreamweaver-to-color-code-alternate-file-types/</guid>
		<description><![CDATA[I&#8217;ve been stymied lately by Dreamweaver, my preferred coding program. I still hold onto this program because I know it&#8217;s key commands and color coding. However, I&#8217;ve been working in a new template system and the internal files have a new file extension. I don&#8217;t know if it is a Yahoo! secret system, so let&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been stymied lately by <a href="http://www.adobe.com/products/dreamweaver/">Dreamweaver</a>, my preferred coding program.  I still hold onto this program because I know it&#8217;s key commands and color coding.  However, I&#8217;ve been working in a new template system and the internal files have a new file extension. </p>
<p>I don&#8217;t know if it is a Yahoo! secret system, so let&#8217;s just call this new extension <strong>.ted</strong>.  I like the way that sounds. So, how do I get this new .ted file to look like a .php file in Dreamweaver&#8217;s code view?  I tried to find the information on the <del datetime="2007-04-13T18:01:54+00:00">Macromedia</del> <ins datetime="2007-04-13T18:01:54+00:00">Adobe</ins> site and only came up with documentation about the preexisting .inc files.</p>
<p>David A found this page:  <a href="http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_16410">Changing and adding file extensions recognized by Dreamweaver MX</a>. It solved the issue. </p>
<p>Dreamweaver has a series of text and xml files that let you customize it&#8217;s functionality. You&#8217;ll need to open these files in something other than Dreamweaver. I used XMLSpy but Notepad would be just as peachy.  There&#8217;s a txt file, Extensions.txt, that lists all of the file types recognized. Add your new file name at the top and then under the subcategory. I added .ted under php.<br />
You then need to open MMDocumentTypes.xml and add the new file extensions in the appropriate win and mac file extensions fields.</p>
<p>This may sound complicated but it is pretty easy. I&#8217;d give it a 1 star on the difficulty ratings. </p>
<p>I was hoping that I could set up multiple .ted files, i.e. css.ted, php.ted, and js.ted.  Dreamweaver doesn&#8217;t like these double file type strings. So just choose the category that best fits your programming field.</p>
<p>Finding this information could take you hours, possibly days.  Adjusting the files and living a much happier coding life will take about 5 minutes. Now stop staring at black text and make it purty!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.last-child.com/set-up-dreamweaver-to-color-code-alternate-file-types/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Convert American date format to European and vice versa</title>
		<link>http://www.last-child.com/convert-american-date-format-to-european-and-vice-versa/</link>
		<comments>http://www.last-child.com/convert-american-date-format-to-european-and-vice-versa/#comments</comments>
		<pubDate>Thu, 01 Feb 2007 21:52:41 +0000</pubDate>
		<dc:creator>Ted</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Regular expression]]></category>
		<category><![CDATA[Variable]]></category>

		<guid isPermaLink="false">http://www.last-child.com/convert-american-date-format-to-european-and-vice-versa/</guid>
		<description><![CDATA[This PHP script came up in a discussion I had today with Jon Whitlock, who&#8217;s from the other side of the pond (U.K.) It&#8217;s a nifty little regular expression that converts an American date (12/31/2006) into a European date (31/12/2006). It struck me as a neat little snippet that others could probably use. Updated Code [...]]]></description>
			<content:encoded><![CDATA[<p>This <a href="http://php.net/" title="PHP" rel="homepage" class="zem_slink">PHP script</a> came up in a discussion I had today with Jon Whitlock, who&#8217;s from the other side of the pond (U.K.) It&#8217;s a nifty little regular expression that converts an American date (12/31/2006) into a European date (31/12/2006).  It struck me as a neat little snippet that others could probably use.</p>
<h3>Updated Code</h3>
<p>As Scott mentioned in the comments, I have changed the snippet to put quotation marks around the second regular expression.<br />
<code lang="PHP"><br />
   $date=“12/31/2006″;<br />
   print ereg_replace(“([0-9]+)/([0-9]+)/([0-9]+)”,“\2/\1/\3“,$date);<br />
</code><br />
As he described it, the first section of the ereg_replace statement takes the date and places it into three variables, 1,2,and 3. It then places those variables into a new string in the 2/1/3 pattern. That makes this a round trip function. Your European dates can get converted back to Yankee days as well.</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=9b32cd39-8c50-4a10-8d1a-21c96eb9b142" /></div>
]]></content:encoded>
			<wfw:commentRss>http://www.last-child.com/convert-american-date-format-to-european-and-vice-versa/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Set up PuTTY to SSH into Dreamhost accounts</title>
		<link>http://www.last-child.com/set-up-putty-to-ssh-into-dreamhost-accounts/</link>
		<comments>http://www.last-child.com/set-up-putty-to-ssh-into-dreamhost-accounts/#comments</comments>
		<pubDate>Mon, 29 Jan 2007 15:53:08 +0000</pubDate>
		<dc:creator>Ted</dc:creator>
				<category><![CDATA[Online Resource]]></category>
		<category><![CDATA[PEAR]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.last-child.com/set-up-putty-to-ssh-into-dreamhost-accounts/</guid>
		<description><![CDATA[I am working on a new page and needed to install the XML_RSS PEAR script yesterday on my Dreamhost Account. I tried the customer support and went to their twiki. Dreamhost supplies a basic set of PEAR functions and you have to create a new folder and upload any extras that you&#8217;d like to use. [...]]]></description>
			<content:encoded><![CDATA[<p>I am working on a new page and needed to install the <a href="http://pear.php.net/package/XML_RSS">XML_RSS</a> PEAR script yesterday on my <a href="http://www.dreamhost.com/rewards.cgi?7mary4">Dreamhost</a> Account. I tried the customer support and went to their twiki. Dreamhost supplies a basic set of <a href="http://pear.php.net/">PEAR</a> functions and you have to create a new folder and upload any extras that you&#8217;d like to use.  Normally, I&#8217;d quit at this point and try something else. I hate the command line. It gives me heeby jeebies. If I can&#8217;t do something with a mouse, I&#8217;m quitting.</p>
<p>But, in the spirit of learning new things, I persevered. I installed <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">PuTTY</a> (<a href="http://the.earth.li/~sgtatham/putty/latest/x86/putty.zip">putty.zip</a>) on my desktop and began the effort of logging in and updating the server. (<strong>PuTTY</strong> is a simple program that allows you to establish SSH connections with a server) Alas, it was a no-go. I couldn&#8217;t establish a connection. At this point, I do what is normal for a front-end engineer. I fired up the Yahoo! messenger and sent plaintive cries to the back-end engineers that seemed to be online for help. Unfortunately, they had just left their computers running and were nowhere to be seen.</p>
<p>So, back to the Dreamhost twiki. Luckily, their <a href="http://wiki.dreamhost.com/index.php/SSH">SSH documentation</a> links to a really great blogpost by <a href="http://www.phileplanet.com/">Phile Planet</a>. This tutorial on <a href="http://www.phileplanet.com/archives/2006/08/how-to-setup-ssh-on-windows-xp/">How to setup SSH on Windows XP</a> walks you through the process step-by-step. It even predicted that one step may not work for me and offered the workaround.</p>
<blockquote cite="http://www.phileplanet.com/archives/2006/08/how-to-setup-ssh-on-windows-xp/">
<h3>Logging in</h3>
<p>I was able to login at this point by going to the command prompt, typing <code>plink mydomain.com</code> and entering my username and password (Dreamhost people: it’s the FTP username/password). I don’t know why the original tutorial went further to do something else but if it doesn’t work for you, try doing the extra step</p>
<ul>
<li>Go back to the command prompt and type <code>pageant</code>. Double-click on the computer wearing a hat when it pops up in your system tray</li>
<li>Click <strong>Add Key</strong> and go to where you stored that private key. Double-click it and enter your password for the key if you made one earlier</li>
<li>Now go to the command prompt and type <code>plink mydomain.com</code></li>
<li>Enter your username and it should just login from there</li>
</ul>
<p>That’s about it. Here are a few links with stuff you can do in the Shell</p>
<p><cite><a href="http://www.phileplanet.com/archives/2006/08/how-to-setup-ssh-on-windows-xp/">www.phileplanet.com/archives/2006/08/how-to-setup-ssh-on-windows-xp/</a></cite>
</p></blockquote>
<p>Take a look at this tutorial if you are using Dreamhost, or any host for that matter, and Windows XP. It will take you about 15 minutes to set up PuTTY on your machine and hook it into the Dreamhost servers.  You&#8217;ll never know when you need something like this and it&#8217;s nice to know that you&#8217;ve already got it setup ahead of time.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.last-child.com/set-up-putty-to-ssh-into-dreamhost-accounts/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Comfort &#8211; the death of creativity</title>
		<link>http://www.last-child.com/comfort-the-death-of-creativity/</link>
		<comments>http://www.last-child.com/comfort-the-death-of-creativity/#comments</comments>
		<pubDate>Sun, 28 Jan 2007 21:15:23 +0000</pubDate>
		<dc:creator>Ted</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[FLORWAX]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.last-child.com/comfort-the-death-of-creativity/</guid>
		<description><![CDATA[I had an art teacher, Walt Cotten, that would remind us to not get comfortable with our medium. As soon as that happened, our images would become stale and our creativity would plummet. He&#8217;d encourage us to throw our existing styles to the wind and try something completely different. I&#8217;ve gotten comfortable with CSS. It&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>I had an art teacher, <a href="http://art.sdsu.edu/areas/photography.html#faculty">Walt Cotten</a>, that would remind us to not get comfortable with our medium. As soon as that happened, our images would become stale and our creativity would plummet. He&#8217;d encourage us to throw our existing styles to the wind and try something completely different.</p>
<p>I&#8217;ve gotten comfortable with CSS. It&#8217;s like walking and chewing gum. I don&#8217;t check CSS Zen Garden every day for the latest design. I don&#8217;t seem to have the time to experiment with new CSS3 techniques. I&#8217;m getting stale. </p>
<p>So, what do I do? I&#8217;ve been working heavily in CSS, XML, and XSL for the past two years. It&#8217;s time to do something new.  I&#8217;ve dabbled in adapting other people&#8217;s php code. I&#8217;ve dabbled in handheld style sheets. I&#8217;ve dabbled with RSS feeds and a million other things.  My goals this year are to break into some new paths. I&#8217;m going to start building php pages from scratch, play around with Flash lite and other mobile applications, and delve into Internationalisation. </p>
<p>I&#8217;m starting from scratch with PHP. As soon as I finish my first project, I&#8217;ll document it on this site for the other CSS people out there looking for the base level tutorials. I know the frustration of asking for advice and having a PHP coder say &#8220;It&#8217;s easy, setup a parser, blah, blah blah&#8230;&#8230;. and that&#8217;s it!&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.last-child.com/comfort-the-death-of-creativity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Latest releases</title>
		<link>http://www.last-child.com/latest-releases/</link>
		<comments>http://www.last-child.com/latest-releases/#comments</comments>
		<pubDate>Sat, 16 Dec 2006 19:40:24 +0000</pubDate>
		<dc:creator>Ted</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[XSL]]></category>
		<category><![CDATA[Yahoo!]]></category>

		<guid isPermaLink="false">http://www.last-child.com/latest-releases/</guid>
		<description><![CDATA[I&#8217;ve been a busy camper this year. Sometimes it seems like I&#8217;m so deep in code that I can&#8217;t enjoy the fun, creative aspects of web development. However, I have seen a couple sites launch that I&#8217;ve had the pleasure of working on. Yahoo! Food When I heard Yahoo! was building a food site, I [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been a busy camper this year. Sometimes it seems like I&#8217;m so deep in code that I can&#8217;t enjoy the fun, creative aspects of web development.  However, I have seen a couple sites launch that I&#8217;ve had the pleasure of working on. </p>
<h3><a href="http://food.yahoo.com">Yahoo! Food</a></h3>
<p>When I heard Yahoo! was building a food site, I thought Hot Diggity Damn. I want to work on that one.  However, I was deeply committed to an important post-launch facelift of <a href="http://tech.yahoo.com">Yahoo! Tech</a>.  So, I told the Food team that I wanted to help as much as possible. This is a really nice site, with a great leader. The site, from the very beginning, had a distinct character and huge ambitions.  Programming the code was nothing compared to what the project managers did for the content.  </p>
<p>I was only able to help with some of the early templates and platform settings. The Food team deserves tons of credit for putting together a great site in an amazingly quick time.</p>
<h3><a href="http://www.edenfloraldesigns.com">Eden Floral Designs</a></h3>
<p><a href="http://www.edenfloraldesigns.com"><img src="http://www.edenfloraldesigns.com/images/feat1.jpg" alt="Eden Floral Designs" /></a>When I came to Yahoo!, I knew very little about PHP and XSL. I was anxious to learn the languages and have gotten pretty darn good with XSL. PHP, however is still a new language for me. My friend <a href="http://www.littlevoicewithin.com/">Pam</a> asked me to help her build an e-commerce site for her new floral business back in early summer. I told her I couldn&#8217;t do it but would look around. Soon enough, I realized this was a good time to jump knee-deep in PHP and learn how to use it. We grabbed a pre-packaged cart sytem, enlisted a friend, <a href="http://www.grenix.com/">Marc</a>, to do the secured server settings, and off we went.</p>
<p><a href="http://www.x-cart.com/">X-cart</a> is robust, but fairly easy to work with. It&#8217;s PHP and Smarty based.  I spent several weeks  replacing tables with standards-based markup, editing the CSS, updating the JS, and adding Pam&#8217;s unique visual statement.  It&#8217;s a pretty site with lots of white space and no rounded corners, my pet peeve.</p>
<p>I still have some validation errors to fix, some legacy code to cleanup, and some cross-browser fixes. But for just the two of us, this site came out pretty dang nice.  If you are looking for a <a href="http://www.edenfloraldesigns.com">San Diego Florist</a>, check out the site. If you are looking for an e-commerce platform, take a look at X-cart. This site took about 200 hours to transform and build. That&#8217;s not a small amount, but I considered it a learning experience and didn&#8217;t mind a bit. </p>
<h3>Coming Up</h3>
<p>I&#8217;m working on a new project at Yahoo! that is coming along great. In this world of bloated Web 2.0 web sites, this is a lean, mean fighting machine. It is blazingly fast and perfectly suited for its audience. You&#8217;ll have to wait a few more weeks for the announcement. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.last-child.com/latest-releases/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

