<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.1.2" -->
<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/"
	>

<channel>
	<title>Webmaster-Talk.com Blog</title>
	<link>http://www.webmaster-talk.com/blog</link>
	<description></description>
	<pubDate>Tue, 29 May 2007 18:21:20 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.1.2</generator>
	<language>en</language>
			<item>
		<title>PHP / MySQL Pagination</title>
		<link>http://www.webmaster-talk.com/blog/27/php-mysql-pagination</link>
		<comments>http://www.webmaster-talk.com/blog/27/php-mysql-pagination#comments</comments>
		<pubDate>Mon, 09 Apr 2007 16:50:05 +0000</pubDate>
		<dc:creator>mgraphic</dc:creator>
		
		<category><![CDATA[Coding]]></category>

		<guid isPermaLink="false">http://www.webmaster-talk.com/blog/27/php-mysql-pagination</guid>
		<description><![CDATA[There is a lot of talk on Webmaster-Talk about how to do pagination.  There are a few steps involved with doing so, but with a few custom functions, it can be easy.
We will start with a connection to our database and we can use our MySQL connection class for that:
http://www.webmaster-talk.com/blog/17/php-mysql-connection-class
Let’s introduce the code.  [...]]]></description>
			<content:encoded><![CDATA[<p>There is a lot of talk on Webmaster-Talk about how to do pagination.  There are a few steps involved with doing so, but with a few custom functions, it can be easy.</p>
<p>We will start with a connection to our database and we can use our MySQL connection class for that:</p>
<p><a href="http://www.webmaster-talk.com/blog/17/php-mysql-connection-class">http://www.webmaster-talk.com/blog/17/php-mysql-connection-class</a></p>
<p>Let’s introduce the code.  It’s a basic PHP class script in which we can include in our web application only once, and we can use over and over with simple configuration on the page scripting side.</p>
<p><code><br />
class myPagination {</p>
<p>/*<br />
* @return object<br />
* @param string  $select_string<br />
* @param string  $from_string<br />
* @param string  $where_string<br />
* @param int     $display_limit<br />
* @desc          Get the results of a database query according to the page number<br />
*/<br />
public function ReturnResults ($select_string, $from_string, $where_string = '', $display_limit = 20) {</p>
<p>$this-&gt;select_string = $select_string;<br />
$this-&gt;from_string = $from_string;<br />
$this-&gt;where_string = $where_string;<br />
$this-&gt;page = floor(abs((int)$_GET['page']));<br />
if ($this-&gt;page &lt; 1) $this-&gt;page = 1;<br />
$this-&gt;results_total = $this-&gt;_count_results();</p>
<p>$this-&gt;_get_limits($display_limit);</p>
<p>if ($this-&gt;results_total === 0) return false;<br />
return $this-&gt;_get_results();<br />
}</p>
<p>/*<br />
* @return int<br />
* @desc       Count the number of results returned from the query<br />
*/<br />
private function _count_results () {<br />
global $db;</p>
<p>$count_results = $db-&gt;Execute('SELECT COUNT(*) AS count FROM ' . $this-&gt;from_string . ( (!empty($this-&gt;where_string)) ? ' WHERE ' . $this-&gt;where_string : '' ));<br />
return (int)$count_results-&gt;fields['count'];<br />
}</p>
<p>/*<br />
* @return object<br />
* @desc          Get the results of a database query<br />
*/<br />
private function _get_results () {<br />
global $db;</p>
<p>return $db-&gt;Execute('SELECT ' . $this-&gt;select_string . ' FROM ' . $this-&gt;from_string . ( (!empty($this-&gt;where_string)) ? ' WHERE ' . $this-&gt;where_string : '' ) . ' LIMIT ' . $this-&gt;limit_start . ',' . $this-&gt;display_limit);<br />
}</p>
<p>/*<br />
* @return bool<br />
* @param int   $display_limit<br />
* @desc        Set the limit range for the query<br />
*/<br />
private function _get_limits ($display_limit) {</p>
<p>$this-&gt;display_limit = floor(abs((int)$display_limit));<br />
if ($this-&gt;display_limit &lt; 1) $this-&gt;display_limit = 1;<br />
$this-&gt;total_pages = ceil($this-&gt;results_total / $this-&gt;display_limit);<br />
if ($this-&gt;page &gt; $this-&gt;total_pages) $this-&gt;page = $this-&gt;total_pages;<br />
$this-&gt;limit_start = ($this-&gt;page &lt;= 1) ? 0 : ($this-&gt;page - 1) * $this-&gt;display_limit;<br />
return true;<br />
}</p>
<p>/*<br />
* @return string<br />
* @param int     $display_group<br />
* @param string  $seperator<br />
* @param string  $fstring_pages<br />
* @param string  $fstring_current<br />
* @param string  $fstring_prev_next<br />
* @desc          Return the html for the page links<br />
*                $display_group can be set to any number to group links or set to 0 for unlimited<br />
*                odd numbers work best<br />
*/<br />
public function GetPageLinks ($display_group = 5, $seperator = ' ', $fstring_pages = '%s', $fstring_current = '%s', $fstring_prev_next = '%s') {</p>
<p>if ($this-&gt;total_pages &lt;= 1) return ' ';</p>
<p>if ($display_group &gt; 0) {</p>
<p>$display_range = array($this-&gt;page - floor($display_group / 2) + (($display_group % 2 === 0) ? 1 : 0), ($this-&gt;page + floor($display_group / 2)));<br />
if ($display_range[0] &lt; 1) {</p>
<p>$display_range[0] = 1;<br />
$display_range[1] = $display_group;<br />
}</p>
<p>if ($display_range[1] &gt; $this-&gt;total_pages) {</p>
<p>$display_range[1] = $this-&gt;total_pages;<br />
$display_range[0] = $this-&gt;total_pages - ($display_group - 1);<br />
}</p>
<p>if ($display_range[0] &lt; 1) $display_range[0] = 1;<br />
if ($display_range[1] &gt; $this-&gt;total_pages) $display_range[1] = $this-&gt;total_pages;</p>
<p>} else {</p>
<p>$display_range = array(1, $this-&gt;total_pages);<br />
}</p>
<p>$output_array = Array();<br />
for($i = $display_range[0]; $i &lt;= $display_range[1]; $i++) {</p>
<p>if ($i == $this-&gt;page) {</p>
<p>$output_array[] = sprintf($fstring_current, $i);</p>
<p>} else {</p>
<p>$output_array[] = sprintf('&lt;'.'a href="?page=' . $i . '"&gt;' . $fstring_pages . '&lt;'.'/a&gt;', $i);<br />
}<br />
}</p>
<p>array_unshift($output_array, ( $this-&gt;page &gt; 1 ? '&lt;'.'a href="?page=' . ($this-&gt;page - 1) . '" title=" previous page "&gt;' : '' ) . sprintf($fstring_prev_next, '‹') . ( $this-&gt;page &gt; 1 ? '&lt;'.'/a&gt;' : '' ));<br />
array_unshift($output_array, ( $this-&gt;page &gt; 1 ? '&lt;'.'a href="?page=1" title=" first page "&gt;' : '' ) . sprintf($fstring_prev_next, '«') . ( $this-&gt;page &gt; 1 ? '&lt;'.'/a&gt;' : '' ));<br />
$output_array[] = ( $this-&gt;page &lt; $this-&gt;total_pages ? '&lt;'.'a href="?page=' . ($this-&gt;page + 1) . '" title=" next page "&gt;' : '' ) . sprintf($fstring_prev_next, '›') . ( $this-&gt;page &lt; $this-&gt;total_pages ? '&lt;'.'/a&gt;' : '' );<br />
$output_array[] = ( $this-&gt;page &lt; $this-&gt;total_pages ? '&lt;'.'a href="?page=' . $this-&gt;total_pages . '" title=" last page "&gt;' : '' ) . sprintf($fstring_prev_next, '»') . ( $this-&gt;page &lt; $this-&gt;total_pages ? '&lt;'.'/a&gt;' : '' );</p>
<p>return implode($seperator, $output_array);<br />
}</p>
<p>/*<br />
* @return string<br />
* @desc          Return the page count string<br />
*/<br />
public function GetPageCount () {</p>
<p>return 'Page ' . $this-&gt;page . ' of ' . $this-&gt;total_pages . ' (' . $this-&gt;results_total . ' results total)';<br />
}<br />
}<br />
</code><br />
We will want to include the above class script in our current page that we are working on.  We also will need to include the script to our sql script and start a new connection.  It is important that we assign the database object to the var labeled <strong>$db</strong> (because the pagination class script will reference that var name inside its functions).  So on the page we are building, include the following block of code:</p>
<p><code>&lt;?php</p>
<p>//# Define database connection<br />
define('DB_SERVER', 'localhost');<br />
define('DB_SERVER_USERNAME', 'root');<br />
define('DB_SERVER_PASSWORD', '');<br />
define('DB_DATABASE', 'database_name');</p>
<p>require('mySqlClass.inc.php');<br />
$db = new mysqlClass();<br />
$db-&gt;Connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD, DB_DATABASE);</p>
<p>require('myPaginationClass.inc.php');<br />
$pagination = new myPagination();</p>
<p>?&gt;<br />
</code><br />
Now we need to make a new request to a returned set of results from the database.  The example table in the database will be a members table labeled <strong>members</strong> and we want to return the <strong>username</strong> and <strong>id</strong>.</p>
<p>Let us create that sample query and return the results for our new pagination script to a var labeled <strong>$results</strong></p>
<p><code><br />
// The first parameter is the SELECT string<br />
// The second parameter is the FROM string<br />
$results = $pagination-&gt;ReturnResults('username, id', 'members');<br />
</code></p>
<p>If the database query does not have any data to return, it will return a Boolean of <strong>FALSE</strong>.  If this happens, we can display a message to the user that there are no records to display, other wise we can build an html table of the results along with the pagination links.</p>
<p><code><br />
&lt;?php</code></p>
<p>if (!$results) {</p>
<p>echo &#8216;There are no results to display&lt;br /&gt;&#8217;;</p>
<p>} else {</p>
<p>?&gt;<br />
&lt;div style=&#8221;font-size:10pt;&#8221;&gt;&lt;?php echo $pagination-&gt;GetPageCount() . &#8216; &lt;br /&gt; &#8216; . $pagination-&gt;GetPageLinks(); ?&gt;&lt;/div&gt;<br />
&lt;table border=&#8221;1&#8243; cellpadding=&#8221;8&#8243; cellspacing=&#8221;0&#8243;&gt;<br />
&lt;tr style=&#8221;background-color:black;color:white;font-weight:bold;&#8221;&gt;<br />
&lt;td&gt;Member&#8217;s ID&lt;/td&gt;<br />
&lt;td&gt;Member&#8217;s Username&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;?php</p>
<p>while(!$results-&gt;EOF) {</p>
<p>?&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;&lt;strong&gt;&lt;?php echo $results-&gt;fields[&#8217;id&#8217;]; ?&gt;&lt;/strong&gt;&lt;/td&gt;<br />
&lt;td&gt;&lt;?php echo $results-&gt;fields[&#8217;username&#8217;]; ?&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;?php</p>
<p>$results-&gt;MoveNext();<br />
}</p>
<p>?&gt;<br />
&lt;/table&gt;&lt;br /&gt;<br />
&lt;?php</p>
<p>}</p>
<p>?&gt;<br />
Voila!  We just successfully displayed a set of results from a sql query and split the results on multiple pages rather than just one page.  But what else can we do?  We will now look at different ways we can customize the results and format the links…</p>
<p><strong><em>Customization:</em></strong></p>
<p>Lets say we want to return a set of results from our members table, but we want to show members that has had their birthday on or before 1980 and we also want to sort alphabetically by the members username.  We also want to show 50 to each page instead of the default amount of 20.</p>
<p><code><br />
// The first parameter is the SELECT string<br />
// The second parameter is the FROM string<br />
// The third parameter is the WHERE string<br />
// The fourth parameter is the display limit number<br />
$results = $pagination-&gt;ReturnResults('username, id', 'members', 'members_birthdate &lt; 12-31-1980 ORDER BY username', 50);<br />
</code></p>
<p>Now we want to customize our page links.  We want the text to be bold in Arial font in a grey color.  We want the previous and next links not to be underlined, and we want the current page to be red in color while the other page links to be black in color.  We also want to display all the page links and not just a range of pages separated with the <strong>|</strong> pipe.</p>
<p><code><br />
&lt;!--<br />
// The first parameter is the pages to display number - set to 0 to display all pages<br />
// The second parameter is the seperator string<br />
// The third parameter is the pages link format string<br />
// The fourth parameter is the current page format string<br />
// The fith parameter is the prev/next link format string<br />
//--&gt;</code></p>
<p>&lt;div style=&#8221;font-family:arial;color:#999;font-weight:bold;&#8221;&gt;&lt;?php echo $pagination-&gt;GetPageLinks (0, &#8216; | &#8216;, &#8216;&lt;span style=&#8221;color:black;&#8221;&gt;%s&lt;/span&gt;&#8217;, &#8216;&lt;span style=&#8221;color:red;&#8221;&gt;%s&lt;/span&gt;&#8217;, &#8216;&lt;span style=&#8221;text-decoration:none;&#8221;&gt;%s&lt;/span&#8221;&#8216;); ?&gt;&lt;/div&gt;<br />
We can use the vars from the class script to create additional functions.  By knowing the amount of total pages returned from a result, we can build a Jump-To drop-down menu to redirect the user to the selected page:</p>
<p><code><br />
&lt;select onchange="window.location='?page='+this.value;"&gt;<br />
&lt;option selected&gt;Page:&lt;/option&gt;<br />
&lt;?php</code></p>
<p>for($i = 1; $i &lt;= $pagination-&gt;total_pages; $i++) echo &#8216;  &lt;option value=&#8217; . $i . &#8216;&gt;&#8217; . $i . &#8216;&lt;/option&gt;&#8217; . &#8220;\n&#8221;;</p>
<p>?&gt;<br />
&lt;/select&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webmaster-talk.com/blog/27/php-mysql-pagination/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP / MySQL Connection Class</title>
		<link>http://www.webmaster-talk.com/blog/17/php-mysql-connection-class</link>
		<comments>http://www.webmaster-talk.com/blog/17/php-mysql-connection-class#comments</comments>
		<pubDate>Wed, 28 Feb 2007 01:53:52 +0000</pubDate>
		<dc:creator>mgraphic</dc:creator>
		
		<category><![CDATA[Coding]]></category>

		<category><![CDATA[Other]]></category>

		<guid isPermaLink="false">http://www.webmaster-talk.com/blog/17/php-mysql-connection-class</guid>
		<description><![CDATA[The PHP scripting language is a great tool for new people who build websites and learning programming syntax. Most people who use PHP only skim the surface of what the language can do and don’t learn how to use PHP in more of a way to help their code become easier to accomplish backend tasks.
PHP [...]]]></description>
			<content:encoded><![CDATA[<p>The PHP scripting language is a great tool for new people who build websites and learning programming syntax. Most people who use PHP only skim the surface of what the language can do and don’t learn how to use PHP in more of a way to help their code become easier to accomplish backend tasks.</p>
<p>PHP newbie’s usually use it to display output, and find themselves needing to keep it complex and inefficient by pasting code over and over each time they perform similar duties. For example, those who want to connect to a MySQL database to pull or write data will keep adding a block of code to connect to the database each time they try to perform a task. This can become tiresome and really confuse the main function of what they are trying to accomplish.</p>
<p>The power in programming comes from building other functions and classes (OOP, Object Oriented Programming) to do the tedious grunt work for you, so your main body scripts can just focus on the task at hand. If you find yourself doing a lot of copy and paste that should be more automated, reevaluate your code, and keep those types of tasks nested in a function.</p>
<p>For this example, we will build a class script that will handle MySQL queries in an easy and simple way.</p>
<p><strong>The Class Script:</strong><br />
<code>count_queries = 0;<br />
      $this-&gt;total_query_time = 0;<br />
      $this-&gt;connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD, DB_DATABASE);<br />
      if (!$this-&gt;db_isconnected) $this-&gt;set_error(&#8217;0&#8242;, &#8216;mysqlClass Error: MySQL DB Not Connected&#8217;);<br />
    } </p>
<p>    private function connect($db_server, $db_username, $db_password, $db_database) { </p>
<p>      $this-&gt;database = $db_database;<br />
      $this-&gt;link = @mysql_connect($db_server, $db_username, $db_password, false); </p>
<p>      if ($this-&gt;link) { </p>
<p>        if (@mysql_select_db($db_database, $this-&gt;link)) {<br />
          $this-&gt;db_isconnected = true;<br />
          return true;<br />
        } else {<br />
          $this-&gt;set_error(mysql_errno(),mysql_error(), $zp_real);<br />
          return false;<br />
        } </p>
<p>      } else { </p>
<p>        $this-&gt;set_error(mysql_errno(),mysql_error());<br />
        return false;<br />
      }<br />
    } </p>
<p>    private function set_error($err_num, $err_text) { </p>
<p>      echo $err_num . &#8216; &#8216; . $err_text;<br />
      die();<br />
    } </p>
<p>    public function Execute($sql, $limit = false) { </p>
<p>      if ($limit) $sql = $sql . &#8216; LIMIT &#8216; . $limit;<br />
      $time_start = explode(&#8217; &#8216;, microtime());<br />
      $obj = new mysqlClassResult;<br />
      $db_resource = @mysql_query($sql, $this-&gt;link);<br />
      if (!$db_resource) $this-&gt;set_error(@mysql_errno($this-&gt;link),@mysql_error($this-&gt;link));<br />
      $obj-&gt;resource = $db_resource;<br />
      $obj-&gt;cursor = 0;<br />
      if ($obj-&gt;RecordCount() &gt; 0) { </p>
<p>        $obj-&gt;EOF = false;<br />
        $result_array = @mysql_fetch_array($db_resource);<br />
        if ($result_array) { </p>
<p>          while (list($key, $value) = each($result_array)) { </p>
<p>            if (!ereg(&#8217;^[0-9]&#8217;, $key)) $obj-&gt;fields[$key] = $value;<br />
          }<br />
          $obj-&gt;EOF = false; </p>
<p>        } else { </p>
<p>          $obj-&gt;EOF = true;<br />
        } </p>
<p>      } else { </p>
<p>        $obj-&gt;EOF = true;<br />
      } </p>
<p>      $time_end = explode (&#8217; &#8216;, microtime());<br />
      $query_time = $time_end[1]+$time_end[0]-$time_start[1]-$time_start[0];<br />
      $this-&gt;total_query_time += $query_time;<br />
      $this-&gt;count_queries++;<br />
      return($obj);<br />
    } </p>
<p>    public function InsertID() {<br />
      return @mysql_insert_id($this-&gt;link);<br />
    } </p>
<p>    public function QueryCount() {<br />
      return $this-&gt;count_queries;<br />
    } </p>
<p>    public function QueryTime() {<br />
      return $this-&gt;total_query_time;<br />
    }<br />
  } </p>
<p>  class mysqlClassResult { </p>
<p>    public function MoveNext() { </p>
<p>      $this-&gt;cursor++;<br />
      $result_array = @mysql_fetch_array($this-&gt;resource);<br />
      if (!$result_array) {<br />
        $this-&gt;EOF = true;<br />
      } else {<br />
        while (list($key, $value) = each($result_array)) {<br />
          if (!ereg(&#8217;^[0-9]&#8217;, $key)) {<br />
            $this-&gt;fields[$key] = $value;<br />
          }<br />
        }<br />
      }<br />
    } </p>
<p>    public function RecordCount() { </p>
<p>      return @mysql_num_rows($this-&gt;resource);<br />
    }<br />
  } </p>
<p>?&gt;</code><br />
Now we need to assign the values to connect to the database. We can use the <a href="http://www.php.net/manual/function.define.php"><strong>define()</strong></a> function in an included configuration file. What makes <strong>define()</strong> work nice in this case, is that defined constants are auto global (they can be accessed in any linked function).</p>
<p><strong>The Configuration Script:</strong><br />
<code>&lt;?php</p>
<p>  define(&#8217;DB_SERVER&#8217;, &#8216;localhost&#8217;);<br />
  define(&#8217;DB_SERVER_USERNAME&#8217;, &#8221;);<br />
  define(&#8217;DB_SERVER_PASSWORD&#8217;, &#8221;);<br />
  define(&#8217;DB_DATABASE&#8217;, &#8216;clcag&#8217;);</p>
<p>?&gt;</code></p>
<p>Now once we include the configuration and class script files in our main script file, we can now create a new instance of the class object.</p>
<p>
<code>$db = &amp;new mysqlClass();</code></p>
<p>Now if we want to fetch some data from the database, we just use our class object to assign the values to a new variable.</p>
<p>
<code>$test = $db-&gt;Execute('SELECT * FROM table_name');</code></p>
<p>Now to iterate through the returned rows, we just reference the fields by field names. By evaluating if the object var EOF is false, we can determine when the last row is returned. After each iteration, we move the pointer to the next row.</p>
<p>
<code>while(!$test-&gt;EOF){<br />
  print_r($test);<br />
  $test-&gt;MoveNext();<br />
}</code></p>
<p>We can easily count how many rows were returned by calling a custom function.</p>
<p>
<code>echo $test-&gt;RecordCount();</code></p>
<p>We can insert a new row, and then find the last ID inserted in the auto-increment field.</p>
<p>
<code>$db-&gt;Execute('INSERT INTO table_name (field1, field2, field3) VALUES("a", "b", "c")'); </p>
<p>Last Inserted ID: InsertID(); ?&gt;</code></p>
<p>At the end of our script, we can display the total number of queries and total time in seconds it all took.</p>
<p>
<code>QueryCount(); ?&gt; Queries in QueryTime(); ?&gt; second(s)</code></p>
<p></p>
<p>This code is a customized version of the Query Factory class script originally written by the developers of Zen-Cart</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webmaster-talk.com/blog/17/php-mysql-connection-class/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Creating Well-Built Sites</title>
		<link>http://www.webmaster-talk.com/blog/11/creating-well-built-sites</link>
		<comments>http://www.webmaster-talk.com/blog/11/creating-well-built-sites#comments</comments>
		<pubDate>Wed, 28 Feb 2007 01:51:36 +0000</pubDate>
		<dc:creator>Former Marine</dc:creator>
		
		<category><![CDATA[Coding]]></category>

		<category><![CDATA[General Web Design]]></category>

		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://www.webmaster-talk.com/blog/11/creating-well-built-sites</guid>
		<description><![CDATA[Search engines have moved beyond simply calculating keyword density and link relevance.  More and more, the major search engines are mastering the ability to identify natural human language and evaluate a web page based on natural human language.  By learning to identify natural human language, search engines are able to greatly reduce the [...]]]></description>
			<content:encoded><![CDATA[<p>Search engines have moved beyond simply calculating keyword density and link relevance.  More and more, the major search engines are mastering the ability to identify natural human language and evaluate a web page based on natural human language.  By learning to identify natural human language, search engines are able to greatly reduce the amount of search engine spam.  As search engines learn to better identify the natural language structure of websites, sites that are well formed will have a natural advantage &#8212; good search engine rankings will always depend on more than just the structure and content of a website, the content of a website will always be the heart of a page&#8217;s rankings.</p>
<p><strong>Make a Search Engine’s Job Easy</strong></p>
<p>Search engine spiders have a lot of work to do every month attempting to discover new web pages and update already discovered web pages, trying to distinguish between titles, content, structural code, and even the occasional keyword stuffing by search engine spammers.  Simplify your website; make the job easier for the spider and allow the spider to index more pages on your site in a shorter amount of time.  Many site owners have paid absolutely no attention to how efficient their code is &#8212; this may result in alot of unnecessary code, which results in a bloated code that may be difficult and confusing for a search engine to decipher, or the spider may misinterpret the code.</p>
<p><strong>Consider Moving to a Table-less Layout</strong></p>
<p>Over time, many site owners were able to present visually appealing websites through tabled layouts and visitors quickly became used to the graphic rich and well organized content &#8212; therefore with tabled layouts, HTML code became sloppy and full of information that dealt only with the layout of the site, not with the content.</p>
<p>Most site owners know CSS to be a tool that they can use to edit the appearance of text and the colors of their site, but CSS is also a tool that can be used for the layout of your site. As CSS comes out with newer versions, layout will become a more important development.  Site owners are reluctant to take the time, energy, and money to really learn HTML and CSS, or to learn how they can make their websites truly accessible; but in the end, they could be hurting their search engine rankings once search engines move closer to identifying natural human language &#8230; designing your site properly does take time and effort, but the rewards are numerous.</p>
<p>So how do you move to a table-less layout?  The answer is simple &#8230; learn HTML and CSS.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webmaster-talk.com/blog/11/creating-well-built-sites/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
