Денис Усачев

Денис Усачев

С нами с 26 июля 2016; Место в рейтинге пользователей: #823
grasp graspoff
24 марта 2014, 19:56
3
+1
class myDelivery extends msDeliveryHandler {
    public function getCost(msOrderInterface $order, msDelivery $delivery, $cost=0) {
    $totalCostDL=0;
    $products=$this->ms2->cart->get();
    foreach($products as $product){
        $costDL=$this->getPrDlCost($product);
        $totalCostDL += $costDL;
    }
    $cost += $totalCostDL;
    return $cost;
	}
Ну и функция с логикой
private function getPrDlCost($product) {
        $PrDlCost=1000000;
        $pids = $this->modx->getParentIds($product['id'],1);
        $PrCategory = $pids[0];
        $PrCount = $product[count];
        switch ($PrCategory) {
	case '67': 
				if ($PrCount <= 6) $PrDlCost = 1200;
				if ($PrCount > 6 && $PrCount <= 15) $PrDlCost = 1700;
				if ($PrCount > 15 && $PrCount < 25) $PrDlCost = 3900;
				if ($PrCount >= 25) $PrDlCost = 0;
                break;
		....
	}

Никита Павлов
Никита Павлов
04 января 2014, 16:29
2
0
Итак, вот мой кастомный класс доставки:
<?php
class hobysDeliveryHandler extends msDeliveryHandler {
	
	public function getCost(msOrderInterface $order, msDelivery $delivery, $cost = 0) {
		$cart = $this->ms2->cart->status();
	    $cities = $this->modx->getService('delcities','DelCities',$this->modx->getOption('delcities.core_path',null,$this->modx->getOption('core_path').'components/cities/').'model/DelCities/');

	$delid = $delivery->get('id');
        $cityid = $_POST['city'];
        $city = $this->modx->getObject('DelCity',$cityid);
        switch ($delid) {
        case 1:
        $add_price = $city->get('self');
        break;
        case 2:
        $add_price = $city->get('courier');
        break;
        case 3:
        $add_price = $city->get('post');
        break;
        }

		$cost += $add_price;
		return $cost;
	}
}
Так выглядит часть чанка заказа с выбором городов:
<div class="control-group">
			    <label class="control-label"><span class="required-star">*</span>Выберите город</label>
				<div class="controls input-parent">
					<select id="cities" name="city">
					     [[!delcities? &tpl=`delcities`]]
					</select> 
				</div>
				<label class="control-label"><span class="required-star">*</span> [[%ms2_frontend_delivery_select]]</label>
				<div class="controls">
					[[+deliveries]]
				</div>
				
			</div>
При проверке переменная $cityid = $_POST['city']; оказывается пустой.

Я заметил что при редактировании любого поля формы, отсылается запрос POST к action.php с кодом действия add. Мой же селект полностью игнорируется, думаю в этом и причина. Возможно неправильно оформлен селект, не хватает атрибутов, был бы благодарен за подсказку.
Василий Наумкин
18 сентября 2013, 17:23
9
0
<?php
$tvid = 1; // id нужного ТВ параметра
$res = array(); // Сюда забиваем результаты

$q = $modx->newQuery('modTemplateVarResource', array('tmplvarid' => $tvid));
$q->select('contentid,value');
if ($q->prepare() && $q->stmt->execute()) {
	while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
		$res[$row['contentid']] = $row['value'];
	}
}
print_r($res);

Получишь массив с id ресурсов и значенями ТВ c id = 1.