We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 5
    • 38 Posts
    И так пишу снипетик для работы с баннерами.

    Основная идея:

    Есть некая папка(Banners Id:62). В данной папке находиться документ(banner1 id:63) который является ссылкой, к данному документу привязана TV(BannersTV) тип который img.

    Получаем контент для вывода банеров сл.снипетом:

    [!BannerOutput?BannersParetnFolder=`62`!]
    <?php
    $Ids = $modx->determineIDs($BannersParentFolder, 'parents', '', '', '', '1', '1', '0', '0', '', '', '', '', '', '', '', '');
    $ret = $modx->getDocuments($Ids, '1', '0', 'content', '', '', 'id', '', '', 'ASC', '');
    kod dlja obrabotki $ret
    return $ret;
    ?>
    


    Не непрягаясь можно обработать $ret чтоб привести к сл.значению:
    <a href="content<-ссылка" тут вывести что вам не обходимо><img src="ЗначениеTV" /></a>

    Ничего сложного вроде нет, однако при использовании $modx->determineIDs вылетает сл. ошибка Fatal error: Call to undefined function: determineids().... В чем грабли не пойму, т.к в самой функции прописано, что она является глобальной, но вызвать ее не получается.

    Кто знает в чем проблеммы с determineIDs в Ditto 2.0.2 помгоите разобраться, закончу снипетик и будет совсем не плохое решение для работы с баннерами.
      • 33694
      • 742 Posts
      Если determineIDs из Ditto, чёж вы её из $modx вызываете?
        • 897
        • 1,620 Posts
        Aleksey Stepanov Reply #3, 19 years ago
        м-дя.

        [[Ditto? &parents=`62` &display=`1` &randomize=`1` &tpl=`banners`]]
        


        чанк banners
        <a href="[+ta+]" title="[+longtitle+]"><img src="[+imageTV+]" alt="[+longtitle+]"></a>
        


        так сойдет?
          "Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein."

          Не используйте Revo для "просто сайтов". Используйте Evo

          Who can defeat the Russian bear?
          • 5
          • 38 Posts
          Quote from: [e
          Bu$ter link=topic=18530.msg116029#msg116029 date=1190809079]
          Если determineIDs из Ditto, чёж вы её из $modx вызываете?

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

          Quote from: aleksey.stepanov at Sep 26, 2007, 07:19 AM

          м-дя.

          так сойдет?

          Неа, не совсем. Слишком сильно для такой мелочи.

          Вот что получилось накатать во время обеденного перерыва.

          Сниппет BannerOutput:

          <?php
          /*
          * Sample: [!BannerOutput?BannersParentFolder=`xx` &BannersTvName=`xx`!]
          * BannersParentFolder - Banners Folder ID.
          * BannersTvName - Name of Template var. which contains link to image file.
          */
          $ret = $modx->getActiveChildren($BannersParentFolder,'id','ASC','id');
          $results = false;
          foreach($ret AS $key1=>$value1){
          	foreach($value1 AS $key2=>$value2){
          		$ids[]=$value2;
          	}
          }
          
          foreach($ids AS $key1=>$value1){
          	$imglink		=	$modx->getTemplateVar($BannersTvName, 'id', $value1, '1');
          	$resourcelink	= 	$modx->getDocument($value1, 'description, link_attributes, content', '1', '0');
          	$results.='<a href="'.$resourcelink['content'].'" '.$resourcelink['link_attributes'].'><img src="'.$imglink['value'].'" title="'.$resourcelink['description'].'" /></a><br />';
          }
          
          return $results;
          ?>
          


          Ссылка задается через контент, атрибу ссылки через поле с атрибутами, а линк до картинки через ТВ типа image.
            • 33694
            • 742 Posts
            Quote from: -CC- at Sep 26, 2007, 07:44 AM

            Quote from: [e
            Bu$ter link=topic=18530.msg116029#msg116029 date=1190809079]
            Если determineIDs из Ditto, чёж вы её из $modx вызываете?

            Потому что из если вызывать их из модх то создается нужный обьект класса для работы с данной функйией. Если вызывать напряму через дито то данного обьекта нет, пока нету времени расковырять движек парсера.
            ...
            Да да, $modx сам догадается, что некий determineIDs является методом Ditto, найдёт необходимые файлы, создаст его объект для вас и переадресует ему вызов, как же wink
              • 5
              • 38 Posts
              Quote from: [e
              Bu$ter link=topic=18530.msg116063#msg116063 date=1190817509]
              Да да, $modx сам догадается, что некий determineIDs является методом Ditto, найдёт необходимые файлы, создаст его объект для вас и переадресует ему вызов, как же wink

              Ну я думаю при написании МОДх воспользовались всеми возможности ООП на ПХП, реализация движка который подключает те методы которые еще не определены возможна, могу выслать некоторые рабочие примеры. Занимает 3-4 листа формата А4. Поэтому при правильном движке, $modx->ditto->determineIDs.... можно вызвать и как $modx->determineIDs.... Хотя опять таки, утверждать ничего не буду, может в МОДХе не так происходит. Ковырять движек пока некогда. Самое главное, что пример работы с банерами получился относительно легкий и простой.

              Пример от Алексея с использованием Дитто- функционален, однако если везде использовать Дитто то скорость загрузки страницы меняется заметно, в случае интернет магазина лишние секунды критичны. У меня пока интернет магазином не пахнет, но все к этому движется, иначе небыло бы смысла переносить сайт на МОДх так и оставил бы его на кривой CMS местной "дизайн студии".
                • 897
                • 1,620 Posts
                Aleksey Stepanov Reply #7, 19 years ago
                главная заповедь программиста "" работает!? ничего не трогай". вторая "не нужно писать то, что уже написано".

                а теперь, если для вас дитто "слишком сильно". то подумайте о том, что ОН уже установен, что он описан, что с ним работаете не только вы. а ваш, очень крутой сниппет, использует полтора человека. где выгода?!
                  "Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein."

                  Не используйте Revo для "просто сайтов". Используйте Evo

                  Who can defeat the Russian bear?
                  • 26770
                  • 74 Posts
                  Сам столкнулся с такой проблемой. Решил так как пишет aleksey.stepanov сам додумался smiley Но вот незадача случилась с форматом баннеров? Что делать если он *.swf ?
                  Флеш не воткнешь в <img src="" ... > .

                  Потому пришлось сделать пока через дитто и взяться за написание своего сниппета. Пока не готов но скоро думаю доделаю.

                  Правда если все же есть возможность подменить шаблон при попадании флешевого баннера то это все же было бы круче!
                    • 6871
                    • 13 Posts
                    Quote from: Seruy at Apr 15, 2008, 05:25 PM

                    ...и взяться за написание своего сниппета. Пока не готов но скоро думаю доделаю.
                    Вообще странно, почему до сих пор нормального баннерного модуля никто из поклонников MODx сделал huh А надо именно модуль+сниппет, а не просто сниппет. Чтобы в модуле можно было создавать, редактировать, удалять баннеры и категории баннеров. Баннер должен обладать следующими свойствами(полями):
                    - название баннера
                    - ссылка
                    - либо картинка, либо флешка, либо текст (с возможностью загрузки картинки и флешки на сервер)
                    - вероятность (сила) показа, в случаи если сниппету задается вывод случайного баннера из определенной категории
                    - количество показов (если 0, то неограничен по количеству показов)
                    - дата начала показа
                    - дата конца показа
                    - галка опубликован или нет
                    - статистика по количеству кликов, с возможностью обнулить

                    Категории нужны и полезны в случаи если на сайте используется несколько блоков вывода баннеров (предположим в шапке необходимо выводить по одному из категории «Флеши 468x60» idCat=1, а в подвале – по 5 штук из категории «Баннеры100х100» idCat=2)
                    Собственно сниппет должен отвечать за вывод баннеров, т.е. сначало проверка картинка, текст или флешка и потом подстановка шаблона вывода, так же сниппет должен перехватывать клики по баннерам и записывать в БД.

                    В качестве параметров сниппета предусмотреть например следующие:
                    &idCat – из какой категории брать баннеры (по умолчанию выбираются все подряд)
                    &limit – количество вывода на экран (по умолчанию все)
                    &sortBy – сортировка либо по названию, либо по порядку создания (id), либо по силе показа (по умолчанию по ключу id)
                    &random – включить случайный вывод, когда задан лимит (по умолчанию выключен) – случайность должна зависеть от свойства «сила показа»
                    &tpl_img(_swf,_txt) - подключение шаблонов для извращенцев (возможно кому либо будет не понраву в ссылке target=”_blank”)
                      • 6871
                      • 13 Posts
                      Quote from: Seruy at Apr 15, 2008, 05:25 PM

                      Правда если все же есть возможность подменить шаблон при попадании флешевого баннера то это все же было бы круче!
                      На создание выше описанного модуля у меня крайне не хватает времени, да и опыта в PHP мало.
                      Поэтому сейчас пользую всю мощь Ditto + TV + PHx
                      Почти как писал выше aleksey.stepanov
                      [!Ditto? &id=`99` &startID=`22` &summarize=`5` &randomize=`1` &tpl=`banner `!]

                      где &startID – папка с баннерами. Для документов-баннеров использую отдельный шаблон и плагин ManagerManager, чтобы убрать лишнее поля

                      чанк banner
                      [+phx:if=`[+banner_swf+]`:isnot=``:then=`<object type="application/x-shockwave-flash" data="[+banner_swf+]?link= http://[+banner_url+]" width="100" height="100">
                          <param name="movie" value="[+banner_swf+]?link= http://[+banner_url+]">
                          <param name="quality" value="high">
                          <param name="wmode" value="transparent">
                          <param name="bgcolor" value="#ffffff">
                      </object>`:else=`<a href="http://[+banner_url+]" target="_blank"><img src="[+banner_img+]" width="100" height="100" border="0" alt="[+description+]"></a>`+]


                      где
                      [+banner_url+] – TV text (не использую тип TV URL, потому что периодически при сохранении http:// превращается в $v)

                      [+banner_img+] – TV image

                      [+banner_swf+] – TV file (но пришлось в файле manager/includes/tmplvars.inc.php исправить в двух местах function BrowseFileServer, заменил browser.html?Type=files&Connector на просто browser.html?Type=&Connector , для того, что бы в браузере можно было работать с папкой flash)

                      З.Ы. Для того что бы не привязываться жестко к width="100" height="100" использую ещё дополнительный рукописный сниппет. Размеры высоты и ширины очень мне нужны для костылей IE6 и ниже в случаи прозрачных PNG баннеров