Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

 

 

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

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

Опубликовано:

Может так?

Опубликовано:

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

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

 

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

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

 

Может так?

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

Опубликовано:
  • Автор

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

 

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

 

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

Опубликовано:
  • Автор

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

Опубликовано:

.htaccess

php_flag display_errors On
php_value error_reporting 7

Опубликовано:
  • Автор

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

 

 

<?

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

Опубликовано:
  • Автор

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

 

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

 

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

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

Сейчас на странице 0

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.