PHP is a capable web scripting language, but there are languages, some more expressively powerful and more organized ( namespaces ), cleaner languages such as Python, Ruby which you may want to look at, with frameworks such as Ruby on Rails, Django, Pylons ( my personal favorite ) which are all MVC based and that is pretty much the common trend nowadays as it's a great design pattern to follow.
PHP is a natural templating language therefore using Smarty is counter-productive. However other languages such as Python which aren't geared towards web templating, in those languages you would use a templating language such as Mako, Cheetah, Genshi, Jinja, and usually you would do these in the templates/views:
<p>Hello ${name}!</p>
For database interaction, most high level developers don't do things procedurally, but instead rely on high level wrappers such as Zend_Db, in other frameworks you have ORM based applications such as SQLAlchemy and Doctrine and proprietary ORMs such as Django's, I like ORMs because you basically define the table schema in the form of classes and do whatever you want. A SQLAlchemy/ORM example:
page_table = schema.Table('page', meta.metadata,
schema.Column('id', types.Integer,
schema.Sequence('page_seq_id', optional=True), primary_key=True),
schema.Column('content', types.Text(), nullable=False),
schema.Column('posted', types.DateTime(), default=now),
schema.Column('title', types.Unicode(255), default=u'Untitled Page'),
schema.Column('heading', types.Unicode(255)),
)
Another popular trend is using a database cache mapping system such as memcached in which you store items as key/value pairs in order such that there's less of a performance hit on the db, memcached can be used in combination with pretty much be paired with any framework that doesn't have a similar native functionality.
For client-side scripting you should rely on a framework such as jQuery which is really great because it makes DOM scripting cross-browser compatible, it's extendable and the syntax is fairly easy to pick-up. This snippet attaches an event handler to every anchor and invokes the alert method.
$('a').click(function() {
alert('you clicked on me!');
return false;
});
It's also worth noting that you should use some sort of localization system instead of hardcode strings into your application such that it can easily support multiple languages, I personally use and recommend gettext, which stores language strings in the form of mo files, which you compile from an editable po file, though there are numerous ways of going about this such as storing them in arrays or csv's, mo files are very efficient. In Zend particularly there's Zend Translate which you could use for this purpose.
$locale = new Zend_Translate('Gettext', 'locale/i18n/en/app.mo');
<div id="greeting"><?php echo $locale->_("Hello"), ' ', $name;?></div>