You know, I've been hearing the framework buzz for so long that I just decided to jump in the water by using it for a project. After some research, I decided to use a framework called codeignitor. Essentially, All that a framework like this accomplishes is providing a way to keep your business logic out of your layout pages. In other words, simple code structures like looping through data to make an unordered list are acceptable, but should be avoided when they do not contribute to freedom of layout. The worst thing in the world is to have some crappy php code that needs to be hacked up to change the layout. Here's an example from my recent work. Notice, there is minimal business logic:
<div class="side">
<div id="menu">
<ul>
<?php foreach ($menu_links as $label => $url): ?>
<li><?php echo anchor($url, $label)?></li>
<?php endforeach; ?>
</ul>
</div>
</div>
I did not have to use the anchor function provided by the framework, but the idea is that the designer can change that from an unordered list to a bunch of divs if he or she wants. The code isn't too terribly difficult to understand either. In fact, smarty templates have similar code structures (just abbreviated.) The advantage is that I do not have to parse a big string and then decide what to inject within it. It really is valid PHP code. $menu_links is a variable that is handled in a function (method call) within a file called a controller. The controller methods handle which layout pages to show and passing data to the layout pages and such. See the video demos on the codeignitor website for further information.
So there's my two cents... 😃
Oh, one more thing...
Since your news probably doesn't change with every page load, you'll get a lot of mileage (in turns of requests per second) by doing some caching. Here is a great tutorial where they used APC to cache data until it times out (one day, a few hours, 30 minutes, etc.)
While you're developing, you could easily adapt this to clear the cache with maybe a ?clearcache in appended to the url to see recent updates to the database when the timeout limit hasn't been exceeded.