We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 26690
    • 25 Posts
    Господа, прошу помочь с вопросом, над которым я ломаю себе голову уже очень долго...
    Ознакомился с данной статьей (http://modx.ru/blog/409/), где описывается создание расширенного поиска при использовании Ditto. Сделал все точно так же...
    Опишу что у меня получилось.
    1) создал 2 TV: tovar, location (расположение товара). По данным ТВ нужно осуществить поиск.
    2) есть чанк (SearchForm), который я разместил на форме расширенного поиска с текстом:
    <form action= "[~19~]" method= "get" >
    <select name="tovar" id="tovar">
    <option value="" selected></option>
    <option value="Газета">Газета</option>
    <option value="презерватив">презерватив</option>
    <option value="трусы">трусы</option>
    <option value="диск">диск</option>
    </select>
    <select name="location" id="location">
    <option value="" selected></option>
    <option value="Центральный">Центральный</option>
    <option value="Южный">Южный</option>
    <option value="Северный">Северный</option>
    <option value="Железнодорожный">Железнодорожный</option>
    </select>
    <input type= "submit" name= "search" value= "Найти"/>
    </form>
    19 - это айди обработчика, где должны выводится варианты соотвествующие варианту выбранный товар+расположение товара ( при логическом И).
    3) создал документ Поиск с кодом вызова снипетта:
    [!Ditto? &tpl=`ditto_subcategory` &startID=`21` &filter=`tvtovar,@EVAL return $_POST[’tovar’];,1|tvlocation,@EVAL return $_POST[’location’];,1` &noResults=`Извините, товар по Вашему запросу не найден.`!].

    Проблема в чем, почему когда я ставлю любую последовательность значений товар+расположение у меня пишет "Извините, товар по Вашему запросу не найден"?? причем при создании документа я ТВ ставлю например сочетание Газета+ЦЕнтральный, то эта связка все равно не находит документ, где она присутствует... Посоветуйте, пожалуйста как решить данную проблему... читал про tvExplorer (тут http://modxcms.com/forums/index.php?topic=16456.140) там что тоже пишут...но там еще более непонятно....!!!
    Очнеь прошу помочь!
      • 31268
      • 111 Posts
      http://modx.ru/blog/409
      Статью читать вместе с комментариями (особенно от 07.07.09)
        Discere ne cesses
        • 26690
        • 25 Posts
        Вот этот снипетт где вызывать?
        <?php global $modx; $filter = ""; if (!empty($_GET[’Destination’])) $filter .= (empty($filter)?"":"|")."tvDestination,".mysql_escape_string($_GET[’De stination’]).",1"; if (!empty($_GET[’Size’])) $filter .= (empty($filter)?"":"|")."tvSize,".mysql_escape_string($_GET[’Size’])." ,1"; if (!empty($_GET[’Brand’])) $filter .= (empty($filter)?"":"|")."tvBrand,".mysql_escape_string($_GET[’Brand’]) .",1"; if (!empty($_GET[’Collection’])) $filter .= (empty($filter)?"":"|")."tvDestination,".mysql_escape_string($_GET[’Co llection’]).",1"; return $modx->runSnippet(’Ditto’, array(’parents’=>’20’, ’display’=>’10’, ’language’=>’russian-UTF8’, ’sortBy’=>’pub_date’, ’dateSource’=>’pub_date’, ’dateFormat’=>’%d.%m.%Y’, ’paginate’=>’1’, ’filter’=>$filter, ’noResults’=>’Извините, по Вашему запросу ничего не найдено.’)); ?>
          • 31268
          • 111 Posts
          вызываешь его вместо ditto на странице, на которую параметрами передаются значения tv - в данном случае по GET, но можно и POST - без разницы
            Discere ne cesses
            • 26690
            • 25 Posts
            Спасибо, вроде ищет! только почему то по одному полю. Вот смотрите, у меня 2 поля..один типа input, другое типа drop down.

            Код вставляю такой
            "<?php
            global $modx; $filter = ""; if (!empty($_GET[’tovar’])) $filter .= (empty($filter)?"":"|")."tvtovar,".mysql_escape_string($_GET[’tovar’]).",1"; if (!empty($_GET[’location’])) $filter .= (empty($filter)?"":"|")."tvlocation,".mysql_escape_string($_GET[’location’])." ,1"; return $modx->runSnippet(’Ditto’, array(’parents’=>’21, 22, 23’, ’tpl’=>’ditto_subcategory’, ’display’=>’10’, ’language’=>’russian-UTF8’, ’sortBy’=>’menuindex’, ’paginate’=>’1’, ’filter’=>$filter, ’noResults’=>’Извините, по Вашему запросу ничего не найдено.’));
            ?>"

            но почему то не хочет вообще по второму полю искать. ни в сочетании с первый полем, ни просто. и еще как можно сделать ввод первого значения регистронезависимым? спасибо...
              • 31268
              • 111 Posts
              Quote from: Seque at Aug 10, 2009, 01:05 AM

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

              Насчет того что не ищет:
              проверь параметры которые передаются (выведи в коде значение $filter)
              как работает фильтр: например передались параметры: tvtovar="Газета", tvlocation="Центральный"
              фильтр отсечет все записи по условию "Товар"!="Газета" и "Место"!="Центральный"
              т.е. в выборку попадут газеты из центрального

              насчет регистронезависмости - используй "9" вместо "1" в условии ( http://ditto.modxcms.com/files/snippet-ditto-php.html#filter )
              PS (Upd): только учти что 7,8,9,10 - это условия на вхождение...
                Discere ne cesses
                • 26690
                • 25 Posts
                Вот мне как раз и надо чтобы были газеты с центра...но почему то не хочет.
                Вот смотрите я ввожу на страницах в TV: Товар: газета; Район: Центральный.
                Потом в форме поиска ввожу в первом поле газета, а во втором drop down выбираю из списка центральный. То есть по идее должны быть как Вы сказали газета с центрального.
                Но вот он ничего не выводит. в адресной строке выглядит так
                /Search.html?tovar=%D0%B3%D0%B0%D0%B7%D0%B5%D1%82%D0%B0&location=%D0%A6%D0%B5%D0%BD%D1%82%D1%80%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9&search=%D0%9D%D0%B0%D0%B9%D1%82%D0%B8
                Ну то есть после tovar= пишется газета в кодировке ASCII и аналогично location после логического & (и).

                А по поводу регистронезависимого:
                изменил как Вы и написали на 9. то есть сейчас выглядит так:
                <?php
                global $modx; $filter = ""; if (!empty($_GET[’tovar’])) $filter .= (empty($filter)?"":"|")."tvtovar,".mysql_escape_string($_GET[’tovar’]).",9"; if (!empty($_GET[’location’])) $filter .= (empty($filter)?"":"|")."tvlocation,".mysql_escape_string($_GET[’location’])." ,9"; return $modx->runSnippet(’Ditto’, array(’parents’=>’21, 22, 23’, ’tpl’=>’ditto_subcategory’, ’display’=>’10’, ’language’=>’russian-UTF8’, ’sortBy’=>’menuindex’, ’paginate’=>’1’, ’filter’=>$filter, ’noResults’=>’Извините, по Вашему запросу ничего не найдено.’));
                ?>

                Все равно ввожу Газеты например не хочет....=(((( голова уже кипит.
                  • 31268
                  • 111 Posts
                  Отписал в личку
                    Discere ne cesses
                    • 26690
                    • 25 Posts
                    Первую проблему решил, просто код снипетта который вы разместили был немного не правильный...
                    Вот правильный!=)
                    <?php
                    global $modx;
                    $filter = "";
                    if (!empty($_GET[’tovar’])) $filter .= (empty($filter)?"":"|")."tvtovar,".mysql_escape_string($_GET[’tovar’]).",9"; if (!empty($_GET[’location’])) $filter .= (empty($filter)?"":"|")."tvlocation,".mysql_escape_string($_GET[’location’]).",9"; return $modx->runSnippet(’Ditto’, array(’parents’=>’20, 22’, ’tpl’=>’ditto_subcategory’, ’display’=>’10’, ’language’=>’russian-UTF8’, ’sortBy’=>’menuindex’, ’paginate’=>’1’, ’filter’=>$filter, ’noResults’=>’Извините, по Вашему запросу ничего не найдено.’));
                    ?>
                    Все хорошо ищет что и задаю...

                    А вот с регистрозависимым не разобрался... А можно например в переменную ТВ конкретного документа несколько значений вставить, чтобы например человек смог написать одного из перечисленных админом слов и был результат...
                      • 31268
                      • 111 Posts
                      Quote from: Seque at Aug 11, 2009, 12:57 AM

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

                      Мммм... даже интересно - в какой части код неправильный был?

                      Quote from: Seque at Aug 11, 2009, 12:57 AM

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

                      "9" - это не чувствительный к регистру отбор на вхождение подстроки в строку (вернее сказать в данном случае - на отсутствие вхождения)
                      не заглядывал в код дитто, но теоретически это должно соответствовать оператору LIKE в селекте mysql
                      другой вопрос дополняет ли дитто поисковую строку шаблонами ’%’ слева и справа (даже самому интересно стало).
                      если не ищет - стоит попробовать обрамить поисковую строку: ’%’.$search_text.’%’

                      опять таки - в дитто всегда есть возможность использовать параметр where вместо filter - и там ручками сформировать выражение в соответствии с правилами MySQL ...


                        Discere ne cesses