Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
wkdsi

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

Recommended Posts

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

 

Я создаю компонент с именем 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

 

 

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

Share this post


Link to post
Share on other sites

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

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

 

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

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

 

Может так?

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

  • Upvote 1

Share this post


Link to post
Share on other sites

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

 

<?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();
?>

 

 

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

Share this post


Link to post
Share on other sites

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

conf_global.php добавить

 

ini_set('display_errors', 1);

 

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

  • Upvote 1

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

.htaccess

php_flag display_errors On
php_value error_reporting 7

  • Upvote 1

Share this post


Link to post
Share on other sites

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

 

 

<?

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'];

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

 

 

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

Share this post


Link to post
Share on other sites

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

А кто сказал, что это можно просто вставить в страничку предназначенную для 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

Share this post


Link to post
Share on other sites

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

 

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

 

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...