Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - fantom103

Страницы: [1]
1
Доброе время суток, уважаемые форумчане!

Не подскажете. может кто сталкивался

Есть интернет магазин(TPL) выводится каталог товаров по шаблону /catalog/default.tpl 
Подключаю шаблон мобильной версии /content/mobile/index.tpl

А вот проблема в том, что вывод каталога в мобильной версии производится по тому же шаблону, что и в основной версии сайта.

Вопрос: можно ли как нибудь изменить шаблон для вывода каталога в мобильной версии сайта?

Спасибо!

2
Спасибо! Получилось. 8)

3
Люди добрые помогите! ???

Надо написать макрос, который парсит данные xml и полученное выводит в TPL шаблон в таком ввиде:

раздел
    подраздел
    подраздел
раздел   
    подраздел
    подраздел
раздел
раздел
раздел

Делаю так:
list($test_block, $test_item, $service) = def_module::loadTemplates("custom/{$template}", "test_block","test_item", "service");
$s = array();
$block_array = array();
$services = array();
$line_array = array();
$service_array = array();


xml:
<?xml version="1.0" encoding="windows-1251"?>
<response>
<Status>Ok</Status>
<Result>
<Device id='49430303' name='раздел'>
<Service id='49706741' name='подраздел'></Service>
<Service id='49706766' name='подраздел'></Service>
</Device>
<Device id='49430303' name='раздел'>
<Service id='49702898' name='подраздел'></Service>
<Service id='49706741' name='подраздел'></Service>
</Device>
<Device id='29641652' name='раздел'></Device>
<Device id='29641652' name='раздел'></Device>
<Device id='29641652' name='раздел'></Device>
</Result>
</response>

с парсингом проблем нет, делаю так:
foreach($resp_xml->Result->Device as $Device) {
$line_array['device'] = (string)$Device['name'];
foreach($Device as $Service) {
$service_array['service'] = (string)$Service['name'];
}
$s[] = def_module::parseTemplate($service,$service_array);
$s[] = def_module::parseTemplate($test_item,$line_array);
}

Пытаюсь вывести вот так:
$block_array = array();
$services = array();
$block_array['lines'] = $s;
$services['services'] = $a;
$s = def_module::parseTemplate($test_block,$block_array);
return $s;

TPL шаблон(test.tpl) у меня такой:
$FORMS = array();

$FORMS['test_block'] = <<<END
<ul>%lines%</ul>
END;

$FORMS['test_item'] = <<<END
<li>
%device%
<ul style="list-style:none;">%services%</ul>
</li>
END;

$FORMS['service'] = <<<END
<li style="color:red;">
%service%
</li>
END;

Результат:

<ul>
<li style="color:red;">подраздел</li>
<li>раздел
     <ul style="list-style:none;">%services%</ul>
</li>
<li style="color:red;">подраздел</li>
<li>раздел
     <ul style="list-style:none;">%services%</ul>
</li>
<li style="color:red;">раздел</li>
<li>раздел
     <ul style="list-style:none;">%services%</ul>
</li>
<li style="color:red;">подраздел</li>
и т. д.  .....
</ul>

4
да это я из статьи пример привел!

если я указываю childs(0), то ничего не возвращает. Просто в моем каталоге есть вложенные подразделы.

Спасибо!

5
Вот теперь другое дело, только в моем случае будет не так:
$pages->where('hierarchy')->page($id_parent)->childs(0); 

а вот так:
$pages->where('hierarchy')->page($id_parent)->childs(4); 

БОЛЬШОЕ ВАМ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!

6
moy_sait/razdel/name?fields_filter[stores_state]=118 да работает в адресной строке.
где stores_state - состояние на складе(составной тип)
118 - id склада

если изменить строку:
$count = $hierarchy->getChildsCount($id_parent, false, true, 0, $hierarchyTypeId);

на selector:

$pages = new selector('pages');
$pages->types('hierarchy-type')->name('catalog', 'object');
$pages->where('stores_state')->equals(118);
$pages->where('hierarchy')->page($id_parent)->childs(0);  
$count = $pages->length;

,то выдает ошибку:

Ошибка (Exception): Произошла критическая ошибка. Скорее всего, потребуется участие разработчиков. Подробности по ссылке 17000

пробовал искать по другому полю(типа кнопка-флажок):
$pages = new selector('pages');
$pages->types('hierarchy-type')->name('catalog', 'object');
$pages->where('chapaevsk')->equals(true);
$pages->where('hierarchy')->page($id_parent)->childs(4);  
$count = $pages->length;

все пырцает!))
Вывод напрашивается что в строке:
$pages->where('stores_state')->equals(118);

явно что то не то...
Вообщем спасибо за помощь! Буду лопатить документацию по API UMI selector

7
public function getCountObjects($id_parent){
$id_parent = (int) $id_parent;
$hierarchy = umiHierarchy::getInstance();
$element = $hierarchy->getElement($id_parent);
if($element && $element->getMethod() == 'category'){
  $count =  $element->count_object->$pages;
  if(!is_null($count)){
 if($count > 0){
return "<span class='total_object'>{$count}</span>";
 }
 else{
return "<span class='is_not_count'></span>";
 }
  }else{
$hierarchyTypes = umiHierarchyTypesCollection::getInstance();
$hierarchyType = $hierarchyTypes->getTypeByName("catalog", "object");
$hierarchyTypeId = $hierarchyType->getId();
$count = $hierarchy->getChildsCount($id_parent, false, true, 0, $hierarchyTypeId);
$element->setValue('count_object',$count);
$element->commit();
if($count > 0) return "<span class='total_object'>{$count}</span>";  
  }  
}
}
Вот рабочий кастом. который подсчитывает кол-во объектов в разделе каталога...
Не подскажите что и где нужно добавить, чтобы кол-во объектов выводилось с учетом фильтра?
фильтр у меня такой ?fields_filter[stores_state]=118.

это фильтр по составному полю, а точнее склады.

Буду Вам очень благодарен за любую помощь!!!
С уважением, Дмитрий.

8
Спасибо! Все получилось!

9
Здравствуйте уважаемые гуру юми цмс! У меня такой вопрос:

Есть форма которая по лицевому счету отправляет на сервер биллинга запрос и возвращает баланс:
<form name="lic" method="post" action="/stat.php">
<table align="center" CELLSPACING="3">
    <tr>
<td width="50%">Введите номер лицевого счёта </td>
<td width="50%" align="center">
        <input name="lic" type="text" size="46">
</td>
    </tr>
    <tr>
<td>&nbsp;</td>
<td align="center"><font size="0" color="grey">должен состоять из цифр и содержать не более 8 символов</font></td>
    </tr>
</table>


<div align="center"><br>
    <input type="submit" name="submit" value="Отправить">
  </div>
</form>

И есть скрипт каторый это обрабатывает:

<?php
    if ($_POST['submit']) {
if (preg_match('/^\d{1,8}+$/',$_POST['lic']))
{
unset ($lines);
$lines=file("http://mysait.ru/cgi-bin/Script.cgi?ACCOUNT=" . htmlspecialchars($_POST['lic']));

if ($lines[0]==1) {
echo "<p class=\"ballance_fail\">" . $lines[1] . "</p><br>";
} else {
$lines[1]=preg_replace('/\n/','',$lines[1]);
echo "<div id=\"bal\"><p class=\"ballance_result\">Состояние лицевого счета "."<b>" . htmlspecialchars($_POST['lic']) . "</b>". " на " . preg_replace("/\n/","",$lines[2] . "<br>");
echo "составляет: ";
echo preg_match('/^-/',$lines[1])?"<b><font color=\"red\">".$lines[1]."</font></b>":$lines[1];
echo " руб.</p></div>";
}
} else {
echo "<div id=\"bal\"><p class=\"ballance_fail\"><font color=\"red\" size=\"4\">В поле ввода можно вводить только цифры!</font><br>";
echo "Запрос не был отправлен!<br>Пожалуйста введите номер лицевого счёта и отправьте запрос снова.</p></div>";
}
    }      
?>

Знаю он не совершенен и требует доработки...

Так вот этот скрипт висел на старом php сайте, теперь я этот сайт переношу на umi-cms и так как в tpl-шаблонизаторе php скрипты не обрабатываются, нужно сделать кастомный макрос. И я сделал так:
в вайле classes/modules/custom.php
        public function balance() {
            if (getRequest('submit')) {
                if (preg_match('/^\d{1,8}+$/',getRequest('lic')))
                {
                    unset ($lines);
                        $lines=file("http://www.mysait.ru/cgi-bin/Script.cgi?ACCOUNT=" . htmlspecialchars(getRequest('lic')));
                   
                    if ($lines[0]==1) {
                        echo "<br><br><br><br><div align=\'center\'>" . $lines[1] . "</div><br>";
                    } else {
                        /* echo "<br><br><br><br>"; */
                        $lines[1]=preg_replace('/\n/','',$lines[1]);
                        echo "<div id=\"bal\"><p class=\"ballance_result\">Состояние лицевого счета "."<b>" . htmlspecialchars(getRequest('lic')) . "</b>". " на " . preg_replace("/\n/","",$lines[2] . "<br>");
                        echo "составляет: ";
                        echo preg_match('/^-/',$lines[1])?"<b><font color=\"red\">".$lines[1]."</font></b>":$lines[1];
                        echo " руб.</p></div>";
                    }
                } else {
                    echo "<div id=\"bal\"><p class=\"ballance_fail\"><font color=\"red\" size=\"4\">В поле ввода можно вводить только цифры!</font><br>";
                    echo "Запрос не был отправлен!<br>Пожалуйста введите номер лицевого счёта и отправьте запрос снова.</p></div>";
                }
            }                                         
        }   

и в шаблоне вывожу - custom balance()
В итоге скрипт работает, но теперь баланс приходит по вверх всего DOM-обекта,так:
<div id="bal">
    <p class="ballance_result">Состояние лицевого счета <b>10010010</b> на 12.06.2013
    <br>составляет: 45.57 руб.</p>
</div>
<!DOCTYPE html>
<html lang="ru">
    <head>

Хотя по сути должен выводится там куда я вставил макрос, под кнопкой submit.
Пожалуйста помогите решить этот вопрос!?

Страницы: [1]