Ну вот, пришло время конкретных рецептов

Условимся о следующем.
Шаги в корзине будут выглядеть следующим образом:
/cart/
/cart/address/
/cart/delivery/
/cart/pay_method/
/cart/complete/
Тогда для начала готовим к этому ТДС "Корзина". На вкладке "Настройки страницы" в начало ТДС, сразу после <?php добавляем следующий код:
<?php
// начало добавляемого кода
$url_items = array();
// last_url_part => needed POST field
$url_items['cart'] = false;
$url_items['address'] = 'step_1';
$url_items['delivery'] = 'step_2';
$url_items['pay_method'] = 'step_3';
$url_items['complete'] = 'step_4';
$last_url_item = end($GLOBALS['URL_ARRAY']);
$page_valid = false;
if (isset($url_items[$last_url_item])) {
$need_post_field = $url_items[$last_url_item];
if ($need_post_field) {
// мы находимся в /cart/some_folder/
if (isset($_REQUEST[$need_post_field])) {
$page_valid = true;
}
} else {
// мы находимся в /cart/
$page_valid = true;
}
}
if (!$page_valid) {
// Элемент/группа не найдены, возвращаем 404 ошибку.
ShowHeader404();
// Запрещаем отдавать 200-й заголовок
if (!defined('IS_ERROR_404')) {
define('IS_ERROR_404', true);
}
$site = &singleton('site');
$site_row = $site->GetSite(CURRENT_SITE);
if ($site_row['site_error404']) {
$structure = &singleton('Structure');
$structure_id = intval($site_row['site_error404']);
$structure_row = $structure->GetStructureItem($structure_id);
// Если тип - страница
if ($structure_row['structure_type'] == 0) {
$document = &singleton('documents');
$documents_version_row = $document->GetCurrentDocumentVersion($structure_row['documents_id']);
$documents_version_id = $documents_version_row['documents_version_id'];
// Текущая страница
$kernel->set_current_page(PAGE_DIR . 'documents' . $documents_version_id .
'.html');
} elseif ($structure_row['structure_type'] == 1) {
// Текущая страница - модуль
$kernel->set_current_page(CMS_FOLDER . 'structure/Modules/Module' . $structure_id .
'.php');
} else {
/* типовая динамическая страница */
$lib_id = intval($structure_row['lib_id']);
/* Получаем параметры типовой динамической страницы */
$lib = new lib();
$GLOBALS['LA'] = $lib->LoadLibPropertiesValue($lib_id, $structure_id);
$kernel->set_current_page(CMS_FOLDER . "lib/lib_$lib_id/lib_$lib_id.php");
}
// Шаблон вывода для страницы
$kernel->set_current_page_data_template($structure_row['data_templates_id']);
} elseif (to_str($_SERVER['REQUEST_URI']) != '/') {
header('Location: /');
// Прекращаем выполнение
exit();
}
}
// конец добавляемого кода. далее текст самой ТДС без изменений
/* Создаем экземпляр класса магазина (при создании устанавливаем флаг необходимости очитстки кукисов в истину) */
$shop = &singleton('shop');
/* Идентификатор интернет-магазина */
$shop_id = to_int($GLOBALS['LA']['shop_id']);
...
Код этот проверяет, соответствует ли текущий url какому-либо шагу корзины, и если да, то передано ли ключевое поле формы. Если да, то отображается соответствующий шаг корзины, если нет - то ошибка 404.
Далее идем в раздел XSL-шаблоны. В редакторе шаблона "МагазинКорзина" дополняем значение action для формы:
<form action="{/cart/shop/path}cart/address/?step_1=1" name="address" method="POST">
Обратите внимание, что для формы от первого шага оформления нам необходимо в action явно прописать get-запрос step1=1 - это нужно для корректного показа процесса оформления в вебвизоре.
Далее в редакторе xsl-шаблона "МагазинАдресДоставки" дополняем путь action в форме и меняем метод с post на get
<form action="{/cart/shop/path}cart/delivery/" name="address" id="address" method="get">
То же самое делаем в шаблоне "МагазинДоставки", но путь для action уже будет
{/cart/shop/path}cart/pay_method/
а метод тоже get
И, наконец, в шаблоне "МагазинПлатежнаяСистема" пишем путь для action
{/cart/shop/path}cart/complete/
и метод тоже указываем get
Собственно, и все.