Мастеркласс по шаблонизатору

Тема в разделе "Шаблонизатор и Шаблоны", создана пользователем Firestarter, 19 фев 2016.

Статус темы:
Закрыта.
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  1. Firestarter

    Firestarter Администратор
    Команда форума

    26 окт 2015
    1.183
    537
    #1 Firestarter, 19 фев 2016
    Последнее редактирование: 25 мар 2016
    Я вам писал что шаблонизатор очень мощный. Тут буду собирать примеры по вопросам клиентов.

    Для начала, самые простые примеры:
    Вывести ключ: {{keyword}}

    Ключ с большой буквы: {{keyword|title}}

    Собираем сниппеты из ПС по этому ключу:
    {% set google_snippets = google_snippets(keyword,10) %}

    Теперь выведем ПЕРВЫЙ сниппет по этому ключу:
    {{snippet[1].title}}
    {{snippet[1].link}}
    {{snippet[1].description}}

    Грабим полную(например по 3 ссылке из выдачи) статью по этому ключу:
    {% set article = get_article(nippet[3].link) %}

    Теперь можно вывести заголовок:
    {{article.title}}

    И тело статьи:
    {{article.content}}

    Теперь я хочу уникализировать(новые 100 слов) статью по Маркову и вывести ее:
    {{article.content|markov(3, 100) }}

    Я хочу уникализировать и подмешать ссылки в статью:
    {{article.content|markov(3, 100)|links(3) }}

    Я хочу уникализировать, подмешать ссылки и какой-то еще ключевик(2 раза) в статью:
    {{article.content|markov(3, 100)|links(3)|strings('Thunder 3', 2) }}
     
    teodocomo и brotherX нравится это.
  2. Firestarter

    Firestarter Администратор
    Команда форума

    26 окт 2015
    1.183
    537
    #2 Firestarter, 19 фев 2016
    Последнее редактирование: 25 мар 2016
    Нужно разбить ТОП1 Статью на 5 равных частей и вывести в шаблоне:

    Беру 10 сниппетов по ключу keyword кладу в переменную google_snippets
    {% set google_snippets = google_snippets(keyword,10) %}

    в article_url кладу ссылку на первый сайт из выдачи по ключу
    {% set article_url = google_snippets{{google_snippets[1].link}} %}

    Граблю полную статью по этой ссылке
    {% set article = get_article(article_url) %}

    Делю статью на 5 равных частей(массивов )
    {% set bar = article.content|split('.', 5) %}

    Клею массив строк через точку и вывожу первую часть или любую другую
    {{ bar[1]|join('. ') }}
     
    ATacker нравится это.
  3. Firestarter

    Firestarter Администратор
    Команда форума

    26 окт 2015
    1.183
    537
    #3 Firestarter, 19 фев 2016
    Последнее редактирование: 25 мар 2016
    Вывести по 200 символов из каждой стаьи ТОП 10 по запросу ключа:

    Беру 10 сниппетов по ключу keyword кладу в переменную google_snippets
    {% set google_snippets = google_snippets(keyword,10) %}

    Обхожу в массиве все топ 10 сниппетов из топа гугла:

    {% for snippet in google_snippets%}

    По каждой ссылке граблю статью.

    {% set article = get_article(snippet.link) %}

    Вывожу 200 символов начиная с 0

    {{ article.content[:200] }}

    {% endfor %}
     
  4. Firestarter

    Firestarter Администратор
    Команда форума

    26 окт 2015
    1.183
    537
    #4 Firestarter, 19 фев 2016
    Последнее редактирование: 19 фев 2016
    Отображаю только те подсказки, которые есть в моем "Белом" листе:

    Собираю все подсказки по ключу
    {% set google_suggests = google_suggests(keyword,10) %}

    Иду по всем подсказкам
    {% for suggest in google_suggests %}

    ЕСЛИ ХОТЬ ОДНО СЛОВО ИЗ ПОДСКАЗКИ есть в белом листе
    {% if string_in_file(suggest,'white_list.txt') %}

    Вывожу подсказку
    {{suggest}}

    {% endif %}

    {% endfor %}

    Для Фильтрации по Блеклисту, используем "not" :

    {% if not string_in_file(suggest,'white_list.txt') %}
     
    DenisDoorwway нравится это.
  5. Firestarter

    Firestarter Администратор
    Команда форума

    26 окт 2015
    1.183
    537
    Разные ключи для разных доменов:

    Самый первый макрос на странице:

    Если обращаются к домену domain.ru
    {% if settings.base_host== domain.ru %}

    Переопределяю главный ключ из настроек
    {% set keyword = 'Тут какой то кей для ру домена' %}

    А если домен другой
    {% elseif if settings.base_host== domain.com %}

    Переопределяю главный ключ из настроек
    {% set keyword = 'Тут какой то кей для com домена' %}

    {% else %}

    А тут ключ для остальных доменов всей пачки
    {% set keyword = 'Бабло' %}

    {% endif %}

    Так же можно проверить, а находиться ли этот домен в массиве доменов:

    {% set first_domains_pack = ['site.ru','site.com', 'site.com.ua'] %}

    Если домен к которому обращается пользователь находиться в списке(массиве) доменов
    {% if settings.base_host in first_domains_pack %}

    {% set keyword = 'Тут главный кей такой-то' %}

    {% else %}

    А тут ключ для остальных доменов всей пачки

    {% set keyword = 'Бабло' %}

    {% endif %}
     
  6. Firestarter

    Firestarter Администратор
    Команда форума

    26 окт 2015
    1.183
    537
    Используем встроенный ТДС:

    Код:
            <!-- Получаю информацию по IP адресу-->
            {% set geo = getGeo() %}
            <!-- Если посетитель из Британии-->
            {% if geo.country.iso == 'GB' %}
                {% set partner_url = 'http://online.titanbet.co.uk/promoRedirect?key=ej0yMTk1NDI1Mzg4Jmw9MjE5MzQ1MjY2NyZwPTYxNTk4' %}
            <!-- Если посетитель из России-->
            {% elseif geo.country.iso == 'RU' %}
                {% set partner_url = 'http://online.mik123.com/promoRedirect?key=ej0yMTk1NDI1NDA0Jmw9MjE5NTQyNTMwMSZwPTYxNTk4' %}
             <!-- Если посетитель из Германии-->
            {% elseif geo.country.iso == 'DE' %}
                {% set partner_url = 'http://online.europaplay.com/promoRedirect?key=ej0yMTk1NDI1NDEyJmw9MjE5NTQyNTMwNyZwPTYxNTk4' %}
            <!-- Если посетитель из Канады-->
            {% elseif geo.country.iso == 'CA' %}
                {% set partner_url = 'http://online.europaplay.com/promoRedirect?key=ej0yMTk1NDI1NDEyJmw9MjE5NTQyNTMwNyZwPTYxNTk4' %}
            <!-- Для Всех остальных-->
            {% else %}
                {% set partner_url = 'http://online.europacasino.com/promoRedirect?key=ej0yMTk1NDI1MjEwJmw9MTM1MTAyODcmcD02MTU5OA%3D%3D' %}
            {% endif %}
    
    <script type="text/javascript">
    
    document.location.href="{{partner_url}}";
    
    </script>
    
    
    
    Если нужно еще и ключ передать:

    Код:
    
    {% set partner_url = 'http://tds.url?key=' ~ keyword %}
    
     
     
    Art, Sotofa и DenisDoorwway нравится это.
  7. Firestarter

    Firestarter Администратор
    Команда форума

    26 окт 2015
    1.183
    537
    Разные ключи для разных доменов, Вариант 3:

    в папку data кладем файл domains.txt, где данные записаны в формате:
    Код:
    phoenix.local;Главный ключ такой-то
    phoenix.ru;Другой главный ключ
    phoenix.net;Третий главный ключ

    тогда код в шаблоне будет следующим:

    Код:
    
    {% for line in rand_str_from_file('domains.txt',10) %}
    
        {% set info = line|split(';') %}
       
        {% if settings.base_host == info[0] %}
       
            {% set keyword = info[1] %}
           
        {% endif%} 
       
    {% endfor %}
    Читать так:
    Беру случайные 10 доменов из файл domains.txt(если число во втором параметре больше их количества то возьмет все строки)
    Прохожусь по всем ним и разделяю каждую строку через ";"
    Если текущий домен есть в этом массиве, то беру для него главный ключ.
     
  8. Firestarter

    Firestarter Администратор
    Команда форума

    26 окт 2015
    1.183
    537
    #8 Firestarter, 25 фев 2016
    Последнее редактирование: 25 фев 2016
    Разные ключи для разных доменов, Вариант 4:

    Мне нужно для разных доменов свой список стартовых ВЧ ключей, что делаю:

    В папке data создаю файл domain.ru.txt куда кладу ключи, каждый с новой строки:
    Код:
    Первый ключ
    Второй ключ
    Третий ключ
    Тогда в шаблон вставляю:
    Код:
    {% for line in rand_str_from_file(settings.base_host ~ '.txt', 10) %}
        <li>{{line}}</li> 
    {% endfor %}
    Читать так:
    Если в папке data лежит файл который начинается на домен к которому обратился пользователь, беру случайные 10 строк. (если это число больше чем ключей в файле - возьмет все строки)
    Вывожу список ключей
     
    teodocomo, sheck и DenisDoorwway нравится это.
  9. Firestarter

    Firestarter Администратор
    Команда форума

    26 окт 2015
    1.183
    537
    Простая клоака на Thunder 3.

    Показываю "ботам" и "людям" разный контент.

    Код:
    {% if isBot() == true %}
    тут контент, если это робот зашел
    {% else %}
    тут контент если человек
    {% endif %}
    Если на странице много блоков текста, можно делать так:

    Код:
    {% set bot = isBot()  %}
    
    {% if bot == true %}
    тут контент, если это робот зашел первый блок
    {% else %}
    тут контент если человек первый блок
    {% endif %}
    
    {% if bot == true %}
    тут контент, если это робот зашел второй блок
    {% else %}
    тут контент если человек второй  блок
    {% endif %}
     
    Thommy, Velial и teodocomo нравится это.
  10. Firestarter

    Firestarter Администратор
    Команда форума

    26 окт 2015
    1.183
    537
    Регулируем рост дорвея в зависимости от количества уже созданных страниц.

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

    Буду регулировать количество новых страниц в зависимости от количества уже сгенерированых:

    есть такая переменная cache_keywords_count(в Thunder 302 и выше, смотри в админке), делаю так:

    Код:
    Если уже сгенернировано меньше 2 страниц на сайте
    {% if cache_keywords_count <= 2 %}
    Устанавливаю переменную suggests_count = 3. То есть буду выводить всего две подсказки из Гугла 
            {% set suggests_count = 3 %}
    Если уже сгенернировано меньше 100 страниц на сайте
    {% elseif cache_keywords_count <= 100 %}
    Устанавливаю переменную suggests_count = 10 
            {% set suggests_count = 10 %}
    {% elseif cache_keywords_count <= 1000 %}
    Устанавливаю переменную suggests_count = 20 
            {% set suggests_count = 20 %}
    Если страниц уже сгенерировано больше 1000
    {% else %}
    Снимаю ограничение на вывод подсказок
           {% set suggests_count = 300 %}
    {% endif %}
    
    И дальше в коде уже вывожу сами подсказки:
    Код:
    {% cache 'content_cache' ~ cache_id 86400 %}
     {% set google_suggests = google_suggests(keyword) %}
                <ul>
                    {% for suggest in google_suggests|slice(1, suggests_count) %}
                        <li><a href="{{settings.base_url}}{{ suggest|url_encode() }}">{{ suggest|title }}</a></li>
                    {% endfor %}
                </ul>
    
    
                {% set yandex_suggests = yandex_suggests(keyword) %}
               <ul>
                    {% for suggest in yandex_suggests|slice(1, suggests_count) %}
                        <li><a href="{{settings.base_url}}{{ suggest|url_encode() }}">{{ suggest|title }}</a></li>
                    {% endfor %}
                </ul>
    {% endcache %}
     
    86400 - означает, что условие if cache_keywords_count будет проверяться раз в сутки(86400 секунд)

     
    ddn128 нравится это.
  11. Firestarter

    Firestarter Администратор
    Команда форума

    26 окт 2015
    1.183
    537
    #11 Firestarter, 21 мар 2016
    Последнее редактирование: 25 мар 2016
    Останавливаю рост новых страниц, если их уже больше какого-то числа.

    Каждые 10(600 сек) минут я буду сверять сколько уже сгенерировано страниц, и если их число меньше 10000 то буду еще показывать подсказки и Гугла.

    cache_keywords_count - это глобальная переменная в которой лежит число уже сгенерированных страниц.

    Код:
    
    {% cache 'content_cache' ~ cache_id 600%}
    
    {% if cache_keywords_count() <= 10000 %}
    {% set google_suggests = google_suggests(keyword) %}
    <ul>
    {% for suggest in google_suggests %}
    <li><a href="{{settings.base_url}}{{ suggest|url_encode() }}">{{ suggest|title }}</a></li>
    {% endfor %}
    {% endif %}
    
    {% endcache %}
    
    
     
  12. Firestarter

    Firestarter Администратор
    Команда форума

    26 окт 2015
    1.183
    537
    Вывожу ссылки на новые страницы раз в три дня( только в дни месяца, которые кратны 3)

    'now'|date('d') - это сегоднешнее число, стандартная функция twig.

    Данные кеширую на один(86400 сек) день.

    Код:
    
    {%  cache 'content_cache' ~ cache_id 86400 %}
    
    {% set today_date = 'now'|date('d') %}
    
    {% if today_date % 3 == 0%}
    
    {% set google_suggests = google_suggests(keyword) %}
    <ul>
    {% for suggest in google_suggests %}
    
    <li><a href="{{settings.base_url}}{{ suggest|url_encode() }}">{{ suggest|title }}</a></li>
    
    {% endfor %}
    </ul>
    
    {% endif %}
    
    {% endcache %}
    
    
     
  13. Firestarter

    Firestarter Администратор
    Команда форума

    26 окт 2015
    1.183
    537
    Как использовать Ping поисковых систем:

    Пингуем только во время первой генерации страницы:
    {% cache 'content_cache' ~ cache_id 0 %}
    {{ ping() }}
    {% endcache %}

    Пингуем каждые 10 дней(864000 сек)
    {% cache 'content_cache' ~ cache_id 864000 %}
    {{ ping() }}
    {% endcache %}

    Пингуем 15-го числа каждого месяца
    {% cache 'content_cache' ~ cache_id 86400 %}

    {% set today_date = 'now'|date('d') %}

    {% if today_date % 15 == 0%}

    {{ping()}}

    {% endif %}

    {% endcache %}
     
  14. Firestarter

    Firestarter Администратор
    Команда форума

    26 окт 2015
    1.183
    537
    Как использовать get_embed функцию

    {% set embed = get_embed('https://habrahabr.ru/company/rtl-service/blog/302998/') %}

    {{embed.title}} //The page title
    {{embed.description}} //The page description
    {{embed.url}} //The canonical url
    {{embed.type}} //The page type (link, video, image, rich)
    {{embed.tags[1]}} //The page keywords (tags)

    {{dembed.images[0].value}} //List of all images found in the page
    {{embed.image}} //The image choosen as main image
    {{embed.imageWidth}} //The width of the main image
    {{embed.imageHeight}} //The height of the main image

    {{embed.code|raw}} //The code to embed the image, video, etc
    {{embed.width}} //The width of the embed code
    {{embed.height}} //The height of the embed code
    {{embed.aspectRatio}} //The aspect ratio width/height

    {{embed.authorName}} //The resource author
    {{embed.authorUrl}} //The author url

    {{embed.providerName}} //The provider name of the page Youtube, Twitter, Instagram, etc
    {{embed.providerUrl}} //The provider url
    {{embed.providerIcons[0].value}} //All provider icons found in the page
    {{embed.providerIcon}} //The icon choosen as main icon

    {{embed.publishedDate}} //The published date of the resource
    {{embed.license}} //The license url of the resource
    {{embed.linkedData[1]}} //The linked-data info
     
  15. Firestarter

    Firestarter Администратор
    Команда форума

    26 окт 2015
    1.183
    537
  16. Firestarter

    Firestarter Администратор
    Команда форума

    26 окт 2015
    1.183
    537
  17. Firestarter

    Firestarter Администратор
    Команда форума

    26 окт 2015
    1.183
    537
  18. Firestarter

    Firestarter Администратор
    Команда форума

    26 окт 2015
    1.183
    537
    Грузим шаблон в зависимости от домена.

    Все довольно просто:
    в вашем config.php в view->public->template
    вместо название вашего шаблона пишем:
    $_SERVER['HTTP_HOST']

    Например, было:
    Код:
                'public' => [
                    'path' => __DIR__ . DIRECTORY_SEPARATOR.'templates'.DIRECTORY_SEPARATOR.'public'.DIRECTORY_SEPARATOR,
                    'template' => 'videoblog',
                ],
    стало:
    Код:
                'public' => [
                    'path' => __DIR__ . DIRECTORY_SEPARATOR.'templates'.DIRECTORY_SEPARATOR.'public'.DIRECTORY_SEPARATOR,
                    'template' => $_SERVER['HTTP_HOST'],
                ],
    только, теперь ваши шаблоны в папке /templates/public/ должны называться site1.ru, site2.ru и когда к вашему сайту будует обращаться по адресу site1.ru , он будет грузить шаблон с названием site1.ru, и соответственно, так далее.
     
    vlad36mir нравится это.
  19. Firestarter

    Firestarter Администратор
    Команда форума

    26 окт 2015
    1.183
    537
    Парсер Ютьюба в Thunder ^3.13


    работает так:
    {% set videos = youtube_videos(keyword) %}

    Чтобы вывести первое видео:
    {{videos[0].title}} Вывести заголовок первого видео
    {{videos[0].url}} Вывести ссылку на первое видео
    {{videos[0].image}} Вывести изображене к видео

    Выводим плеер:
    <iframe width="420" height="315"
    src="{{videos[0].url}}">
    </iframe>
     
    BRAVO нравится это.