Modx Evo ShopKeeper

ShopKeeper - это популярнейшее расширение для интенети-магазинов. Представляет собой в общем корзину. Вокруг нее все и вертится.

Мне удобнее хранить шаблоны(TPL) в файлах. Например в папке order(оформление заказа): шаблоны cartTpl.tpl, cartRowTpl.tpl, orderDataTpl.tpl . В доках написано буквально следующее:

Чанк содержит сразу 3 шаблона - для пустой, заполненной расширенной и простой корзины. Если чанки хранятся в файлах, можно указать путь с командой "@FILE:". Если чанки созданы в системе управления, то указывается только имя чанка (например &cartTpl=`shopCart`)
Возрадовавшись я лихо набросал форму оформления заказа:
[!Shopkeeper? 
&noJQuery=`1` 
&orderFormPage=`10263` 
&flyToCart=`nofly` 
&cartTpl=`@FILE:assets/cppv/TPL/T1/otherPages/ordering/cartTpl.tpl` 
&cartRowTpl=`@FILE:assets/cppv/TPL/T1/otherPages/ordering/cartRowTpl.tpl` 
&orderDataTpl=`@FILE:assets/cppv/TPL/T1/otherPages/ordering/orderDataTpl.tpl` 
&cartType=`full`!]
И увидел пустую страницу. В исходнике нашел:
..../assets/snippets/shopkeeper/classes/class.shopkeeper.php    
......    
  /**
   *
   * @param string $tpl
   * @return string
   */
    function fetchTpl($tpl){
        $template = "";
        if(substr($tpl,-4)=='.tpl' && preg_match('/^(@FILE:)\s?(assets\/snippets\/shopkeeper\/)((chunks\/)|(module\/templates\/)).+/',$tpl))
           {
            $tpl_file = MODX_BASE_PATH . substr($tpl, 6);
            if(file_exists($tpl_file)){
              $template = file_get_contents(trim($tpl_file));
            }
        }else if(substr($tpl, 0, 6) == "@CODE:"){
            $template = substr($tpl, 6);
        }else if($this->modx->getChunk($tpl) != ""){
            $template = $this->modx->getChunk(trim($tpl));
        }else{
            $template = false;
        }
        return $template;
}
....
Т.е. эта сволочь разрешает грузить файлы-шаблоны только со своей директории. Устав порядком от таких вещей, я тупо стер
&& preg_match('/^(@FILE:)\s?(assets\/snippets\/shopkeeper\/)((chunks\/)|(module\/templates\/)).+/',$tpl)
И все заработало. Нехорошо, конечно, править источники. Но тут иначе никак.

Еще один глюк: я в шаблоне корзины для формы заказа решил уменьшить картинку сниппетом:

  <tr class="cart-order">
    <td class="title-col"><img src="[[phpthumb? &input=`[+catalog_item_image+]` &options=`h=60,far=C`]]" />
    <a href="[+link+]" style="text-align:center;display:block;">[+name+] [+addit_data+] </a></td>
    <td class="price-col">[+price_total+] [+currency+]</td>

    <td class="quantity-col"><input style="width: 30px;" class="shk-count" type="text" size="2" name="count[]" maxlength="3" title="изменить количество" value="[+count+]" /> </td>
    <td class="total-col">[+phx:multiply=`[+price_total+]*[+count+]`+] [+currency+] </td>
    <td class="delete-col"><a href="[+url_del_item+]" title="Удалить" class="shk-del"><span class="text-primary glyphicon glyphicon-remove"></span>

</a></td>
</tr>

При загрузке формы заказа все было ОК. Но при пересчете цены, удалении - не обрабатывались сниппеты. Пол дня потратил. Решил опять правкой исходника. Так и не понял как).

      Файл - "/assets/snippets/shopkeeper/ajax-action.php"
      
$modx = new DocumentParser;
$modx->db->connect();
$modx->getSettings();
$modx->config['site_url'] = isset($request['site_url']) ? $request['site_url'] : '';

 $tpl="[+ququ+]";
 $arr=array(ququ=>"I am ququ!!!"); $modx->placeholders=$arr;
 $out=$modx->parseDocumentSource($tpl);

        
    
Т.е. надо было предварительно запустить парсер. Просто так. Пропарсил "левый" чанк. Сам не понял почему, но стало парсить сниппеты. Т.е. все заработало.

to be continued....


Комментарии 0






Разрешённые теги: <b><i><br>Добавить новый комментарий: