Skip to content

Instantly share code, notes, and snippets.

@vgrish
Created January 20, 2017 15:01
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save vgrish/245de1f287a1263a30d81c386d4f7534 to your computer and use it in GitHub Desktop.
Save vgrish/245de1f287a1263a30d81c386d4f7534 to your computer and use it in GitHub Desktop.
```
[[!msOptions?
&options=`tags`
&tpl=`tpl.msOptions.pasta`
]]
```
tpl.msOptions.pasta
```
<fieldset id="mse2_msoption|tags">
<h4 class="filter_title">Начинка</h4>
{foreach $options as $name => $values}
{foreach $values as $value}
<label for="option_{$name}" class="">
<input type="checkbox" name="options[{$name}][]" value="{$value}">{$value}<sup>1</sup>
</label><br>
{/foreach}
{/foreach}
</fieldset>
```
plugin на msopOnAfterGetCost
```
<?php
if ($modx->event->name = 'msopOnAfterGetCost') {
$action = $modx->getOption('action', $_REQUEST);
$options = $modx->getOption('options', $_REQUEST);
$tags = $modx->getOption('tags', $options);
if (!$msoptionsprice = $modx->getService('msoptionsprice')) {
return false;
}
$rid = $modx->getOption('rid', $scriptProperties);
$cost = $modx->getOption('cost', $scriptProperties);
if (is_array($tags)) {
/** @var msProduct $product */
$product = $modx->getObject('msProduct', (int)$rid);
$cost = $product->get('price');
foreach ($tags as $tag) {
$m = $msoptionsprice->getModificationByOptions($rid, array('tags' => $tag));
if (empty($m['id'])) {
continue;
}
$cost += $m['price'];
}
}
$values = $modx->Event->returnedValues;
$values['cost'] = $cost;
$modx->event->returnedValues = $values;
return;
}
```
@vgrish
Copy link
Author

vgrish commented Jan 21, 2017

можно использовать для вывода опций сниппет

[[!msOptionsPrice.modification?
&type=`2,3`
&limit=`30`
&tpl=`tpl.modification.pasta`
]]

tpl.modification.pasta

{foreach $options as $name => $value}
    <input type="checkbox" name="options[{$name}][]"  value="{$value}">{$value}<sup> {$price - $data_price}</sup><br>
{/foreach}

@vgrish
Copy link
Author

vgrish commented Feb 27, 2017

<?php
switch ($modx->event->name) {
    case 'msopOnAfterGetCost':
        if (!$msoptionsprice = $modx->getService('msoptionsprice')) {
            return false;
        }
        
        $rid = $modx->getOption('rid', $scriptProperties);
        $cost = $modx->getOption('cost', $scriptProperties);
        $action = $modx->getOption('action', $_REQUEST);
        $options = $modx->getOption('options', $_REQUEST);
        if (!is_array($options)) {
            return;
        }
        
        foreach ($options as $key => $option) {
            if (!is_array($option)) {
                unset($options[$key]);
            }
        }
       
        if (!empty($options)) {
            /** @var  msProduct $product */
            //$product = $modx->getObject('msProduct', (int)$rid);
            //$cost = $product->get('price');
            
            foreach ($options as $key => $rows) {
                foreach ($rows as $option) {
                    $m = $msoptionsprice->getModificationByOptions($rid, array($key => $option), true);
                    if (empty($m['id'])) {
                        continue;
                    }
                    $modifications[] = $m['id'];
                    //$modx->log(1, print_r($m ,1));
                    $cost += $m['price'];
                }
            }
            
            $values = $modx->Event->returnedValues;
            $values['cost'] = $cost;
            
            $modx->event->returnedValues = $values;
        }
        
        break;
        
    case 'msOnBeforeAddToCart':
        if (!$msoptionsprice = $modx->getService('msoptionsprice')) {
            return false;
        }
        
        /** @var  msProduct $product */
        $product = $modx->getOption('product', $scriptProperties);
        $options = $modx->getOption('options', $scriptProperties);
        
        if (!is_array($options)) {
            return;
        }
        
        foreach ($options as $key => $option) {
            if (!is_array($option)) {
                unset($options[$key]);
            }
        }
       
        $rid = $product->get('id');
        $modifications = array();
        
        if (!empty($options)) {
            foreach ($options as $key => $rows) {
                foreach ($rows as $option) {
                    $m = $msoptionsprice->getModificationByOptions($rid, array($key => $option), true);
                    if (empty($m['id'])) {
                        continue;
                    }
                    $modifications[] = $m['id'];
                }
            }
            
            $options['modifications'] = $modifications;
            $values = $modx->Event->returnedValues;
            $values['options'] = $options;
            
            $modx->event->returnedValues = $values;
        }
        
        break;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment