1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

Инклюд своих php-html файлов в любой шаблон

Тема в разделе "Советы, руководства и видео-уроки", создана пользователем Mr. Brightside, 18.09.2011.

Загрузка
  1. eLts

    eLts Новичок

    Регистрация:
    02.01.15
    Сообщения:
    14
    Симпатии:
    0
    Версия XF:
    1.3.2
    А, а можно подробнее про массив передаваемых в шаблон переменных? Где именно я должен вставить свои переменные из скрипта?
     
  2. eLts

    eLts Новичок

    Регистрация:
    02.01.15
    Сообщения:
    14
    Симпатии:
    0
    Версия XF:
    1.3.2
    Я так понял, нужно использовать переменную $contents, которая находится в Listener.php. Но как использовать мои переменные из скрипта? Подскажите, ничего не могу нарыть
     
  3. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Киньте Ваши исходники сюда. Я же не знаю, что и как Вы используете.
     
  4. eLts

    eLts Новичок

    Регистрация:
    02.01.15
    Сообщения:
    14
    Симпатии:
    0
    Версия XF:
    1.3.2
    Ну хорошо..
    <?php
    define(db_user, "***");
    define(db_pass, "***");
    define(host, "***");
    define(db_name, "***");
    mysql_connect(host, db_user, db_pass);
    mysql_select_db(db_name);
    $userId = $visitor['user_id'];
    $username = $visitor['username'];



    if($userId != 0){
    $zapros = "SELECT * FROM xf_user_field_value WHERE field_id='td' AND user_id=$userId";
    $sql = mysql_query($zapros) or die(mysql_error());
    $data = mysql_fetch_assoc($sql);

    if(count($data) == 1){
    $zapros2 = "INSERT INTO xf_user_field_value (user_id, field_id, field_value) VALUES ('$userId', 'td', '0')";
    mysql_query($zapros2) or die("Ошибка базы данных");
    echo "qwe: 0";
    }
    else
    {
    echo ">>>>>>>>qwe: ".$data["field_value"];
    }
    }
    else {
    header("Location:index.php?login");
    }
    ?>
     
  5. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Это то, что у Вас было изначально. Я же прошу исходники Ваших экспериментов под XenForo.
     
  6. eLts

    eLts Новичок

    Регистрация:
    02.01.15
    Сообщения:
    14
    Симпатии:
    0
    Версия XF:
    1.3.2
    Я проделал все по инструкции. Даже названия скриптов не менял. И мой скрипт имел название blablabla.php. Единственное, что я менял в двиге, это добавлял в конфиг строчку для включения дебаг режима. Все. Ничего более я не делал. Инструкция из шапки и все.
     
  7. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Понятно. Тогда Вы должны сами добавить к $content нужный HTML код.
    Если бы Вы создали свой контроллер и шаблон, тогда могли бы передавать свой массив переменных. Также Вы можете расширить нужный контроллер. В общем решения разные. Но в Вашем случае я бы тогда посоветовал вот такой вариант. Это будет наиболее близко к решению Вашей задачи. Я бы посоветовал только не модифицировать шаблоны напрямую, а использовать систему модификации шаблонов.
     
  8. eLts

    eLts Новичок

    Регистрация:
    02.01.15
    Сообщения:
    14
    Симпатии:
    0
    Версия XF:
    1.3.2
    В моем классе Blablabla_Listener (в котором я лишь менял путь к скрипту) я вставил функцию в публичной функции templateHook, далее вашим способом вызвал тегом callback свой метод - templateHool::sd в атрибуте method, но вылетает ошибка о невозможном вызове метода. Тогда я вставил публичный метод (с названием std) рядом с методом templateHook, вызываю callback'ом std, но вылетает следующая ошибка:
    Could not execute callback Blablabla_Listener::std() - Method does not match prefix: get, is, has, render, view, return, print, show, display.
     
  9. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Применение хуков шабонов нежелательно. Поэтому я и дал ссылку на статью с колбэком. Вот лучше делайте именно таким способом. Первые три пункта решают Вашу задачу. Дальнейшее в статье проигнорируйте, так как это Вам не надо.
     
  10. eLts

    eLts Новичок

    Регистрация:
    02.01.15
    Сообщения:
    14
    Симпатии:
    0
    Версия XF:
    1.3.2
    Спасибо, получилось. Подскажите, как я могу теперь взаимодействовать с данными пользователя? Мне нужны некоторые переменные массива visitor, как я могу подключить это к своему скрипту?
     
  11. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Попробуйте в своем скрипте получить массив следующим образом:
    Код:
    $visitor = XenForo_Visitor::getInstance();
     
    Mirovinger нравится это.
  12. eLts

    eLts Новичок

    Регистрация:
    02.01.15
    Сообщения:
    14
    Симпатии:
    0
    Версия XF:
    1.3.2
    Спасибо, осуществил то, что хотел
     
  13. Адельинвест

    Адельинвест Новичок

    Регистрация:
    01.03.15
    Сообщения:
    1
    Симпатии:
    0
    Версия XF:
    1.4.5
    Почему такой сложный форум? Зачем делать такой велосипед?
     
  14. Exile

    Exile Местный

    Регистрация:
    27.06.11
    Сообщения:
    997
    Симпатии:
    545
    Версия XF:
    1.4.4
    Потому что "велосипед" - это программисты на php4, которые без инклюдов жить не могут. А сложность написания движка (сам принцип MVC) позволяет их отсеять и лишить возможности писать гавноплагины на движок.
     
  15. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    Чем он кажется вам сложным?
     
    Mirovinger нравится это.
  16. Vulnes

    Vulnes Пользователь

    Регистрация:
    28.03.15
    Сообщения:
    16
    Симпатии:
    1
    Версия XF:
    1.4.5
    Как принимать переменные в шаблоне ?
    Мой класс
    PHP:
    <?php

    class Balance_Listener
    {
        public static function 
    balance($hookName, &$contents$paramsXenForo_Template_Abstract $template)
        {
           if (
    $hookName == 'balance') {
               
    $visitor XenForo_Visitor::getInstance();
            
    $viewParams = array(
                
    'visitory' => $visitor,
                
    'onlineUsers' => 10,
                
    'boardTotals' => 10
            
    );
            return 
    $viewParams;
        }
        }
    }
    Пробую принять так
    PHP:
    <xen:hook name="balance">{xen:number $boardTotals}</xen:hook
    Не получается
     
  17. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Хуками уже давно стараются не пользоваться, кстати.
    А вообще вариант с офа вот такой дают:
    Код:
    <xen:hook name="buzztags_editor_attachment" params="{xen:array 'attachment={$attachment}'}" />
     
  18. Vulnes

    Vulnes Пользователь

    Регистрация:
    28.03.15
    Сообщения:
    16
    Симпатии:
    1
    Версия XF:
    1.4.5
    <xen:hook name="balance" params="{xen:array 'viewParams={$viewParams}'}" />
    {xen:number $boardTotals.onlineUsers}


    Так ?
     
  19. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Нет. Как-то так:
    Код:
    <xen:hook name="balance" params="{xen:array 'onlineUsers={$boardTotals.onlineUsers}'}" />
    --- добавлено : Mar 21, 2016 10:55 AM ---
    Кстати, Вы еще и не правильно используете класс хука. В класс передается название хука, контент хука, параметры и шаблон. Так вот вы можете в хуке модифицировать контент. Все остальное Вам дается лишь для использования, а не для изменения. И возвращать Ваша функция ничего не должна - это все равно будет проигнорировано.
    В общем примерно так должно работать:
    PHP:
    <?php

    class Balance_Listener
    {
    public static function 
    balance($hookName, &$contents$paramsXenForo_Template_Abstract $template)
    {
    if (
    $hookName == 'balance') {
      
    $contents .= 'Все, что хотите добавить в вывод';
      return;
    }
    }
    }
     
    Последнее редактирование модератором: 29.03.2016
  20. Vulnes

    Vulnes Пользователь

    Регистрация:
    28.03.15
    Сообщения:
    16
    Симпатии:
    1
    Версия XF:
    1.4.5
    $content .= 'Все, что хотите добавить в вывод';
    Я могу передать массив данных ? Тип :
    $content .= ['balance' => $user->balance];
    И принимать их нужно как вы написали постом выше ?
     
    Последнее редактирование модератором: 29.03.2016

Поделиться этой страницей