shoto у вас используется код взятый с wiki.umisoft
оформление заказа в один шаг на xslt? Если да, то вопрос создания рабочего механизма покупки при выключенном js выглядит следующим образом...
1. изначально все поля необходимые для оформления заказа выводятся на странице (в том числе форма добавления адреса).
С этим вроде все ок у вас2. если посмотреть в код функции
public function saveinfo() то там можно найти такие строчки
//сохранение адреса доставки
$addressId = getRequest('delivery-address');
if($addressId == 'new') {
$collection = umiObjectsCollection::getInstance();
$types = umiObjectTypesCollection::getInstance();
$typeId = $types->getBaseType("emarket", "delivery_address");
$customer = customer::get();
$addressId = $collection->addObject("Address for customer #".$customer->id, $typeId);
$dataModule = $cmsController->getModule("data");
if($dataModule) {
$dataModule->saveEditedObject($addressId, true, true);
}
$customer->delivery_addresses = array_merge( $customer->delivery_addresses, array($addressId) );
}
$order->delivery_address = $addressId;
они отвечают за сохранение адреса доставки, загоняем их в
if, который проверяет является ли выбранный способ доставки
самовывозом (по его id).
В итоге, вышеуказанный код станет таким. id пункта самовывоз приведен для примера, в вашем случае его надо посмотреть в админке при редактировании способа доставки (помер в адресной строке браузера). Пусть в нашем примере, id способа доставки
Самовывоз будет равен
27255.
if($deliveryId == 27255){
//сохранение адреса доставки
$addressId = getRequest('delivery-address');
if($addressId == 'new') {
$collection = umiObjectsCollection::getInstance();
$types = umiObjectTypesCollection::getInstance();
$typeId = $types->getBaseType("emarket", "delivery_address");
$customer = customer::get();
$addressId = $collection->addObject("Address for customer #".$customer->id, $typeId);
$dataModule = $cmsController->getModule("data");
if($dataModule) {
$dataModule->saveEditedObject($addressId, true, true);
}
$customer->delivery_addresses = array_merge( $customer->delivery_addresses, array($addressId) );
}
$order->delivery_address = $addressId;
}
3. после того, как мы на уровне php обезопасили систему от сохранения лишней информации, займемся визуальной частью. А именно, скроем блок для выбора\ввода адреса доставки. Так как, по совету Владимира, мы заботимся о пользователях с отключенным js (чего я в большинстве случаев не делаю, но это оговаривается с каждым клиентом в частном порядке), то мы скроем форму добавления\выбора адреса теми же средствами js. Чтобы, если js отключен, то ничего и не прячется. И пользователь видит форму добавления\выбора адреса и может, чисто с технической стороны, осуществить заказ.
Для этого мы после вывода блока с выбором\добавлением адреса (пусть весь этот блок лежит внутри <div class="delivery_block">...</div>) напишем js код вида
<script type="text/javascript" language="JavaScript">
var sposob_dostavki_id = jQuery('input[name="delivery-id"]:checked').val();
if(sposob_dostavki_id == 27255 ) jQuery('.delivery_block').hide();
</script>
а как повесить обработку при нажатии на radio input я уже писал в
этом сообщении