Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
wkdsi

IPB 3.1.4 Создание нового компонента\страницы

Рекомендованные сообщения

Пытаюсь создать новый компонент по образцу.

 

Я создаю компонент с именем registration:

post-40626-0-91446500-1295031655_thumb.png

 

В admin/applications_addon/other/registration/index.php вставляю следующий текст, как сказано в том посте:

 

<?php

// Класс, никогда не менять. Работать не будет
class component_public
{
       // Объект ипскласса. Без него опять же не будет ничего работать.
       var $ipsclass;

       // Эта функция вызывается из файла index.php. Название изменять нельзя.
       function run_component()
       {
               /* Тайтл страницы. Можно оформить в виде простой переменной, если у вас весь код состоит из одной
               *  функции. Например $title = 'Моя страничка'; . Но не надо забывать, что переменную следует изменить в других местах тоже. 
               *  В любом случае это посылается файлу class_display.php для вывода в $this->ipsclass->print->do_output() (Смотри ниже). 
               */
               $this->pagetitle = "Регистрация";

               /* Здесь идёт название вашей страницы.
               *  Название также будет показано в панели навигации вашего форума.
               *  Навигацию можно поменять, изменить название и прочее, сделать навигацию более сложной. Зависит от страниц
               *  Например:
               *  $this->nav[] = "<a href='{$this->ipsclass->base_url}autocom=custom'>{$=title}</a>";
               *  $this->nav[] = "Это моя страница";
               *  $this->nav[] = "А это еще одна строчка в навигации";
               */
               $this->nav[] = "<a href='{$this->ipsclass->base_url}autocom=custom'>{$this->pagetitle}</a>";
$this->nav[] = "Это моя страница";
                 $this->nav[] = "А это еще одна строчка в навигации";

               /* Загружаем шаблон главного стиля. Думаю не надо писать, что без этого работать не будет?
               *  Сюда по аналогии можно добавить свои шаблоны, если они, конечно, созданы. Например добавить ниже
               *  $this->ipsclass->load_template( 'skin_mypg' );
               */
               $this->ipsclass->load_template( 'skin_global' );

               // Пустое  место. Здесь можно проводить операции перед форматированием результата в xhtml.

               /* Эта переменная отвечает за вывод уже готового результата в xhtml формате. (Можно изменить название. (Смотри ниже))
               *  Делать с ней можно все что угодно. 
               *  Например:
               *  $output .= $this->ipsclass->compiled_templates['skin_mypg']->show();
               *  Вызовет xhtml фрагмент show, группы skin_mypg (группу надо предварительно загрузить строками выше)
               */
               $output .= "Здесь содержимое страницы, переменные, скины";

               // Пустое  место. Здесь можно проводить операции с форматированным результаом переменной $output

               /* Эти строки отвечают за вывод всего что вы подготовили.
               *  $this->ipsclass->print->add_output () добавит основной готовый xhtml к выводу. В этом выводе будет шапка и низ форума.
               */
               $this->ipsclass->print->add_output ( $output );

               /* Здесь посылаются другие данные файлу class_display.php в виде массива.
               *  Ключ TITLE отвечает за тайтл страницы. Можно просто указать 'TITLE' => $title
               *  Ключ JS отвечает за дополнительный ява скрипт. Например можно туда засунуть xhtml форматированные ссылки на файлы с яваскриптом. 
               *  Это заменяет в wrapper'е слова <% JAVASCRIPT %>
               *  Ключ NAV собственно отвечает за навигацию. Ему передается массив навигации.
               */
               $this->ipsclass->print->do_output ( array( 'TITLE' => "{$this->ipsclass->vars['board_name']} - {$this->pagetitle}", 'JS' => 0, 'NAV' => $this->nav ) );

       } // Конец функции run_component

} // Конец класса
?>

 

Сохраняю, пытаюсь загрузить страницу, но, увы, меня перекидывает обратно на главную. Не меняется даже адресная строка, хотя к пункту в меню прикреплена ссылка: http://***.ru/index.php?app=registration

 

 

Как добавить компонент?

Поделиться сообщением


Ссылка на сообщение

Может так?

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

Пытаюсь создать новый компонент по образцу.

Это для версии IP.Board 2.x На IP.Board 3.x все по другому.

 

Как добавить компонент?

Там где-то было: Developer Resources

 

Может так?

Это не компонент. Страница как компонент, так и не написал. Сейчас разберусь с серверами, допишу.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

По совету статьи использую:

 

<?php

define( 'IPB_THIS_SCRIPT', 'public' );
require_once( '../initdata.php' );

require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );
require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );

$content        = <<<BLK

Ваш контент 

BLK;

$registry = ipsRegistry::instance(); 
$registry->init();
$registry->output->setTitle('Название'); 
$registry->output->addContent($content);  
$registry->output->sendOutput();
?>

 

 

Но получается просто белая страница.

Поделиться сообщением


Ссылка на сообщение

Но получается просто белая страница.

conf_global.php добавить

 

ini_set('display_errors', 1);

 

И посмотреть код ошибки.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

Просто пустая страница. Никаких ошибок не выводит

Поделиться сообщением


Ссылка на сообщение

.htaccess

php_flag display_errors On
php_value error_reporting 7

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

Сам по себе скрипт работает исправно, а при вставке выдаёт:

 

 

<?

define( 'IPB_THIS_SCRIPT', 'public' );
require_once( '../initdata.php' );

require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );
require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );

$content213        = <<<BLK


   include "config.php";

   $Data = '<form action=register.php method=post>
    Login:  
   <input type=text name=login>
    Password:
   <input type=password name=passwd>
    Repeat password:
   <input type=password name=repasswd>
   Email:
   <input type=text name=email>
   <input type=submit name=submit value="Registration">
   </form>';

   if (isset($_POST['login']))
       {
           $Link = MySQL_Connect($DBHost, $DBUser, $DBPassword) or die ("Can't connect to MySQL");
           MySQL_Select_Db($DBName, $Link) or die ("Database ".$DBName." do not exists.");

           $Login = $_POST['login'];
           $Pass = $_POST['passwd'];
           $Repass = $_POST['repasswd'];
           $Email = $_POST['email'];

           $Login = StrToLower(Trim($Login));
           $Pass = StrToLower(Trim($Pass));
           $Repass = StrToLower(Trim($Repass));
           $Email = Trim($Email);

       if (empty($Login) || empty($Pass) || empty($Repass) || empty($Email))
           {
               echo "All fields is empty.";
           }

       elseif (ereg("[^0-9a-zA-Z_-]", $Login, $Txt))
           {
               echo "Login have a incorrect format.";
           }

       elseif (ereg("[^0-9a-zA-Z_-]", $Pass, $Txt))
           {
               echo "Password have a incorrect format.";    
           }

       elseif (ereg("[^0-9a-zA-Z_-]", $Repass, $Txt))
           {
               echo "Repeat password have a incorrect format.";    
           }
       elseif (StrPos('\'', $Email))
           {
               echo "Email have a incorrect format.";    
           }    
       else
           {
               $Result = MySQL_Query("SELECT name FROM users WHERE name='$Login'") or ("Can't execute query.");

       if (MySQL_Num_Rows($Result))
           {
               echo "Account <b>".$Login."</b> is exists";
           }

       elseif ((StrLen($Login) < 4) or (StrLen($Login) > 10)) 

           {
               echo "Login must have more 4 and not more 10 symbols.";
           }

       elseif ((StrLen($Pass) < 4) or (StrLen($Pass) > 10)) 

           {
               echo "Password must have more 4 and not more 10 symbols.";
           }

       elseif ((StrLen($Repass) < 4) or (StrLen($Repass) > 10)) 
           {
               echo "Repeat password must have more 4 and not more 10 symbols.";
           }

       elseif ((StrLen($Email) < 4) or (StrLen($Email) > 25)) 
           {
               echo "Email must have more 4 and not more 25 symbols.";
           }

       elseif ($Pass != $Repass)
           {
               echo "Password mismatch.";
           }        
       else
           {
               // $Salt = $Login.$Pass;
               // $Salt = md5($Salt);
               // $Salt = "0x".$Salt;
               $Salt = base64_encode(md5($Login.$Pass, true));
               MySQL_Query("call adduser('$Login', '$Salt', '0', '0', '0', '0', '$Email', '0', '0', '0', '0', '0', '0', '0', '', '', '$Salt')") or die ("Can't execute query.");
	$mysqlresult=MySQL_Query("select * from `users` WHERE `name`='$Login'");
	$User_ID=MySQL_result($mysqlresult,0,'ID');
	MySQL_Query("call usecash('$User_ID',1,0,1,0,500000,1,@error)") or die ("usecash failed!");
               echo "Account <b>".$Login."(".$User_ID.")"."</b> has been registered.";
           }        
       }    
   }

   echo $Data;    
BLK;

$registry = ipsRegistry::instance(); 
$registry->init();
$registry->output->setTitle('Название'); 
$registry->output->addContent($content213);  
$registry->output->sendOutput();

?>

 

 

 

Ошибка:

 

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/s/schoolmru/gw/public_html/server/test.php on line 26

 

26-я строка:

 

if (isset($_POST['login']))

 

 

Если убираем эту строку, то та же проблема с последующими:

 

 $Login = $_POST['login'];
           $Pass = $_POST['passwd'];
           $Repass = $_POST['repasswd'];
           $Email = $_POST['email'];

 

Преобразование :

 $Login = $_POST['login']; в  $Login = ".$_POST['login'];

результата не приносит.

 

 

В чём проблема?

Поделиться сообщением


Ссылка на сообщение

Сам по себе скрипт работает исправно, а при вставке выдаёт:

А кто сказал, что это можно просто вставить в страничку предназначенную для HTML?

 

В чём проблема?

Да здесь проблема на проблеме. Копипаст....

 

$content213        = <<<BLK


   include "config.php";

Зачем в форму вывода подключает инклюд? Если это надо делать, это делают выше в блоке

 

define( 'IPB_THIS_SCRIPT', 'public' );
require_once( '../initdata.php' );

require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );
require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );

 

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

<<<BLK
....
BLK;

Лишняя она там.

Тогда все должно заработать.

 

Но ...

$Link = MySQL_Connect($DBHost, $DBUser, $DBPassword) or die ("Can't connect to MySQL");
MySQL_Select_Db($DBName, $Link) or die ("Database ".$DBName." do not exists.");

 

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

 

Для авторизации есть authenticateMember

Что то так:

$_valid = IPSMember::authenticateMember($_user['member_id'], md5($password));

 

Регистрацию пользователя, можно посмотреть здесь: Класс для работы с пользователями - IPSMember

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

Хорошо, попробую исправить.

 

Насчёт базы, коннект идёт к базе, которая не относится к форуму и стоит на другой машинке.

 

Без инклудов тоже не обойтись, они подключают необходимые файлы с переменными и прочей информацией.

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...