We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 3843
    • 15 Posts
    Доброго времени суток уважаемому сообществу wink

    Возник вопрос - каким образом на сайте показывать курсы валют без использования стороннего информера.

    Первоначально мысли были использовать TV с @EVAL (где находится небольшой скрипт, который тянет данные с www.cbr.ru). Увы, вариант потерпел полное фиаско, в связи с кешированием результатов.

    Теперь мысли двигаются в следующем направлении:
    - скрипт, который тянет курсы по крону раз в сутки (вроде крон почти везде имеется)
    - записывает данные в /assets/export - как наиболее подходящую для этого папку (ИМХО)
    - отдельный сниппет, который вытягивает данные валют из файла
    - сниппет соответственно в [!!]

    Есть ли более простой способ этого действа?
    Может кто поделится мыслями по этому поводу ?

    С уважением, Сергей
      • 785
      • 2,113 Posts
      Простой сниппет без кеширования есть тут

      http://modxcms.com/forums/index.php/topic,21171.0.html

      а по-хорошему, действительно надо отдельно читать и отдельно выдавать. В принципе ничего сложного в этом нет.
        Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
        Статьи о MODx, регулярно новые публикации
        • 3843
        • 15 Posts
        интересненько, если я все правильно понимаю, то при каждом заходе пользователя он два раза обращается к cbr за данными ?
        если же его кешировать, то тогда будет проблема из первого поста с TV и @EVAL

        идея с cron мне пока более заманчивой кажется smiley
        - мучаем сайт cbr тока один раз в сутки (у меня это 00:10)
        - обращения к локальным ресурсам (файлам, базе) происходят гораздо быстрее
        - по коду, лучше сокеты использовать, оно универсальнее и должно работать в любой конфигурации PHP (ИМХО)

        надо еще думать grin может данные в базу класть (а не в файл), но создавать таблицу с двумя-тремя полями сомнительно

        UP: если не сложно направьте, где про кеширование почитать
          • 785
          • 2,113 Posts
          Quote from: bonzaza at Jan 23, 2008, 04:36 AM

          если же его кешировать, то тогда будет проблема из первого поста с TV и @EVAL
          Под кешированием я подразумевал не использование средств MODx, а сохранение полученных результатов самостоятельно в файле или базе. Можно использовать cron, а можно проверять, есть ли данные на сегодня (например, по дате файла), и в случае их отсутствия обращаться на сайт ЦБР. То есть при первом в сутки вызове будет обращение к внешнему сайту, а при последующих – только к локальному файлу (или к базе). Логика простая и запрограммировать это несложно.
            Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
            Статьи о MODx, регулярно новые публикации
            • 3843
            • 15 Posts
            Созданная в течении нескольких часов версия с cron показала, что эффективности от нее немного.
            - у разных хостеров разные способы вызова php через cron
            - способ установки занимает больше времени, чем установка простого сниппета

            Спасибо товарищу AKots, наведшему на путь более правильного написания
            Таким образом родилась версия небольшого сниппета Act(ual)CBR

            Замечания по сниппету:
            - на настоящий момент не создает свою таблицу в базе самостоятельно
            - не реализован нормальный вывод информации (API по чанкам мне ясен не до конца - разбираюсь wink )
            - написано функционально, без использования классов (постараюсь исправится)
            - отсутствует возможность изменения названия валюты (будет реализовано)
            - писалось под себя, но если окажется полезным сообществу или найдутся ошибки будет продолжен


            Используемая таблица в базе
            CREATE TABLE IF NOT EXISTS `modx_cbr` (
            	`uid` INT(6) UNSIGNED NOT NULL,
            	`name` VARCHAR(20) NOT NULL,
            	`value` VARCHAR(10) NOT NULL,
            	`qdate` DATE DEFAULT '0000-00-00' NOT NULL,
            	PRIMARY KEY (`uid`)
            ) ENGINE = MyISAM DEFAULT CHARSET=cp1251;


            Вызов [!ActCBR? &cbrCur=`840,978(коды всех валют имеются в описательной части файла)` !]

            ЗЫ: предложения, пожелания и замечания приветствуются