A simple way to do it without resorting to actual templates is to have, for every page, two (or more) files:
index.php
index_html.php
You create index.php, designer creates index_html.php.
In index.php, you initialize variables and define functions, then include('index_html.php'). All of the logic is in index.php. As little HTML should be in index.php as possible; it should have one <?php at the start and one ?> at the end and that's it.
In index_html.php there should be the actual HTML, and very little PHP. The only PHP should be to call functions that you defined in index.php.
Suppose the designer wants to stick a pager somewhere on the page. In index.php you define a function called "pager" that spits out the HTML for the pager. In index_html.php the designer puts <?php pager(); ?> where he wants the pager. The benefit here is that he doesn't need to actually know PHP, he just needs to know how to call a PHP function (which is really easy). And you don't have to worry about the design, because it's seperate from your index.php file.
Sometimes, like with the pager() example, your PHP will need to output HTML. Keep that HTML as basic as possible, and let the designer use CSS to change how it looks. The idea being, you and your PHP should do as little about the presentation as possible, because that's the designer's job.
You could do it the other way around, have the designer create index.php, at the top call <?php include('index_functions.php'); ?> and you stick your PHP functions in index_functions.php. I prefer to have the PHP file include() the HTML file rather than the other way around, in case you ever need to include() one of several pages depending on form variables. For example, a search page could display a form, search results, or "no results found" and the designer would want to control the appearance of each seperately.