View Full Version : Help creating new pages in ACP
FounderSim
09-23-2014, 03:00 PM
I cant seem to find any proper documentation on how to create modifications for mysidia. Here's what I have tried so far and can't figure out.
I have modified the class/class_page.php get_page to add my :EXPLORE: page the list of ACP pages if its even required.
I have created my explore.php page following the flow of other pages. To keep it simple, i only created the content first to see if it was even going to work which it didnt.
public function add(){
$mysidia = Registry::get("mysidia");
$document = $mysidia->frame->getDocument();
$document->setTitle($mysidia->lang->explore_title);
$exploreForm = new Form("addform", "add", "post");
$exploreForm->buildComment("<u><strong>Add new status:</strong></u>")
->buildComment("Status Description: ", FALSE)->buildTextField("textDesc")
->buildComment("Status Chance %: ", FALSE)->buildTextField("textDescPerc")
->buildComment("<b>Add Explore Pet</b>")
->buildDropDownList("adopt", "AdoptTypeList")
->buildComment("Pet %: ", FALSE)->buildTextField("textPetPerc")
->buildComment("<b>Add Explore Item:</b>")
->buildDropDownList("item", "ItemList")
->buildComment("Item %: ", FALSE)->buildTextField("textPetPerc")
->buildComment("<b>Coin % Chance: </b>")
->builtComment("Coin Low Amount", FALSE)->buildTextField("textCoinLow")
->buildComment("Coin High Amount: ", FALSE)->buildTextField("textCoinHigh")
->buildButton("Modify Explore", "submit", "submit");
$document->add($exploreForm);
}
I found i had to build my own itemList form helper as there was not one already made so i did so in the class_formhelper.php
/**
* The buildItemList method, builds a dropdown list for available items.
* @param String $name
* @access public
* @return DropdownList
*/
public function buildItemList($name){
$mysidia = Registry::get("mysidia");
$itemList = new DropdownList($name);
$iids = $mysidia->db->select("items", array("id"))->fetchAll(PDO::FETCH_COLUMN);
$inames = $mysidia->db->select("items", array("items"), "1 ORDER BY id")->fetchAll(PDO::FETCH_COLUMN);
$itemList->add(new Option("No Item Selected", "none"));
$itemList->fill($inames, $iids);
return $itemList;
}
so since I could not get the page to be displayed at myurl.com/adminacp/explore/add
I decided i would just add the method to another page to see if that was the problem. So i threw my add method into the image.php admin class and went to myurl.com/adminacp/image/add and the same problem continues.
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, blahblahblah and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
I am guessing that i have to somehow register the files or methods before actual using them?
Will the same concept of creating an acp file apply for creating a player file
IntoRain
09-23-2014, 06:18 PM
In 1.3.4, pages are divided into Controller and View. That means for each new page you need a Controller and a View file. The View is what you show to the user and the Controller is basically treating the information and passing it to the View
For example, your yoursite.com/adopt page is built using the files: adopt.php (controller) and adoptview.php (viewer). All view pages are inside view folders (there are two: one in your mysidia folder, related to player pages, and one inside admincp folder for ACP pages).
To create an yoursite.com/explore page, you need to:
1) Create an explore.php file (same directory as adopt.php, account.php, etc.) with at least these contents:
<?php
use Resource\Native\String;
//note the name ExploreController. If you wanted a page called mypage it would be MyPageController and the file would be mypage.php
class ExploreController extends AppController{
public function __construct(){
parent::__construct("member");
$mysidia = Registry::get("mysidia");
//use the following three lines to make it admin-only
if($mysidia->usergroup->getpermission("canmanageadopts") != "yes"){
throw new NoPermissionException("You do not have permission to access this page.");
}
}
public function index(){
$mysidia = Registry::get("mysidia");
//this is how you pass stuff to the view file
$this->setField("hello",new String("Hello world!"));
}
}
?>
2) Create an exploreview.php file (inside the view folder with adoptview.php, accountview.php, etc.):
<?php
//note the name ExploreView. If you wanted a page called mypage it would be MyPageView and the file would be mypageview.php
class ExploreView extends View{
public function index(){
//the view file messes with the document (page content)
$mysidia = Registry::get("mysidia");
$document = $this->document;
$document->setTitle("Title Test");//needs a title to work
//this is how you get stuff from the controller
$hello = $this->getField("hello");
//add the contents of the variable hello to the document
$document->add(new Comment($hello));
}
}
?>
To make a page like yoursite.com/explore/add, you need to add the method add() similar to index(), for both the ExploreController and the ExploreView
This is also the same concept for ACP pages.
FounderSim
09-23-2014, 06:25 PM
I am using 1.3.3 so what options do I have?
IntoRain
09-23-2014, 06:52 PM
I haven't worked with 1.3.3 in a while now and I don't remember having that error x.x but the page building should be almost the same, for example:
<?php
class ContestController extends AppController{
const PARAM = "contest";
private $view;
private $subController;
public function __construct(){
parent::__construct("member");
$mysidia = Registry::get("mysidia");
if($mysidia->input->action() != "enter" and $mysidia->input->action() != "index" and !$mysidia->input->get("contest")){
throw new InvalidIDException("Invalid Action");
}
}
public function index(){
$mysidia = Registry::get("mysidia");
$document = $mysidia->frame->getDocument();
$document->setTitle("Contest");
//stuff
}
public function enter(){
$mysidia = Registry::get("mysidia");
$document = $mysidia->frame->getDocument();
$document->setTitle("Contest");
//stuff
}
}
----
Did you try making the content simple before building the form to see if it outputs anything? An alternative way of doing forms is in register.php
Do the other pages work (/image/upload for example) or also spit out an Internal Server Error?
FounderSim
09-23-2014, 11:22 PM
I have commented out all the form building and left only the title code and same error. I have even added another method on another page with the following code:
$mysidia = Registry::get("mysidia");
$document = $mysidia->frame->getDocument();
$document->setTitle("TEST");
I then try to access it like mysite.com/adminacp/image/add and it errors.
But if i go to mysite.com/adminacp/image/upload it will work.
Every time I think I figure it out. It doesn't want to work. It is starting to get very frustrating.
FounderSim
09-25-2014, 10:14 AM
I am updated to 1.3.4
I got to my explore/add admin acp page and get same error. still no luck and just as confused.
explore.php ACP
<?php
use Resource\Native\String;
class ACPExploreController extends AppController{
public function __construct(){
parent::__construct();
$mysidia = Registry::get("mysidia");
if($mysidia->usergroup->getpermission("canmanagesettings") != "yes"){
throw new NoPermissionException("You do not have permission to manage promocode.");
}
}
public function index(){
$mysidia = Registry::get("mysidia");
throw new InvalidActionException($mysidia->lang->global_action);
}
public function add(){
$mysidia = Registry::get("mysidia");
//$document = $mysidia->frame->getDocument();
}
}
?>
view/exploreview.php
<?php
use Resource\Native\String;
use Resource\Collection\LinkedHashMap;
class ACPExploreView extends View{
public function add(){
$mysidia = Registry::get("mysidia");
$document = $this->document;
$document->setTitle("TEST");
}
}
?>
I am still getting the
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, blahblah and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
IntoRain
09-25-2014, 11:36 AM
Is your .htaccess file inside the ACP folder like this or similar?
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_URI} !\.(js|css|gif|jpg|png)$ [NC]
RewriteRule ^(.*)$ index.php [QSA,L]
Are the Read-Write-Execute permissions of those files set to 644?
Besides that and the .htaccess, I don't know what's causing that, HoF might be more useful x.x
FounderSim
09-25-2014, 11:55 AM
.htaccess file is 100% identical and file permissions are set to 644.
I already messaged HoF once directing him to this thread. I guess we will see if he comes and responds.
IntoRain
09-25-2014, 12:34 PM
I'm sorry I can't help more, never had that happen to me when creating new pages. Does it happen as well when creating those pages outside ACP?
FounderSim
09-26-2014, 10:14 AM
Ok, So I came to the conclusion I am not so crazy afterall, just frustrated.
<?php
use Resource\Native\Integer;
use Resource\Native\String;
//use Resource\Collection\HashMap;
class TesterController extends AppController{
//private $friendlist;
public function __construct(){
parent::__construct("member");
$mysidia = Registry::get("mysidia");
}
public function index(){
throw new InvalidActionException("global_action");
}
public function test(){
$mysidia = Registry::get("mysidia");
}
}
?>
<?php
use Resource\Native\String;
use Resource\Collection\LinkedHashMap;
class TesterView extends View{
public function test(){
$mysidia = Registry::get("mysidia");
$document = $this->document;
$document->setTitle("TEST");
//$document->addLangvar($mysidia->lang->remove);
}
}
?>
These files will work on PLAYER SIDE, but if i change the class names to ACPTesterView and ACPTester and move to correct locations, they will error and provide
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, blahblahblah and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
IntoRain
09-26-2014, 12:54 PM
Until HoF can investigate the issue, maybe it's better to implement it on the player side for now, if it's an urgent feature and if there isn't a problem with it
Hall of Famer
09-26-2014, 07:49 PM
Do you have lang files for your custom page/script? For every controller in Mys v1.3.4, it must have both a view and a lang file as its counterparts. The lang files store the actual text displayed for the very page.
FounderSim
09-26-2014, 11:19 PM
Do you have lang files for your custom page/script? For every controller in Mys v1.3.4, it must have both a view and a lang file as its counterparts. The lang files store the actual text displayed for the very page.
Its funny that you mentioned that because I was out back on my porch smoking a cig thinking about a suggestion to your language folder structure.
I do not believe a "language" file is required for player files as my Tester Controller and View files both worked without including a language file.
Whether its required for ACP files is another story. I will test that when I am done posting and be back with results.
For my suggestion
Make it multi folders in the main "lang" folder. It seems kind of pointless to have language files if you can't seperate them and its even more time consuming and a pain in the ass thinking of names for language variables, and working back and fourth from language var file and your other files when you could just be typing static text in your code. Just some two cents.
I am sure you already have this planned for the future though =)
en for english by default?
fr for french
sp for spanish
IntoRain
09-27-2014, 10:36 AM
I completely missed that. Funny thing is, I forgot to add that to my News feature as well, even though I had the lang file on my test site. Sorry about that, Sim :/ And thank you HoF!
FounderSim
09-27-2014, 11:21 AM
Ok, I found the solution to my problem although it was a very simple fix a very strange one.
My ACP files was explore and exploreview for view and controller. I renamed them to test and testview and changed to ACPTestView and ACPTestController and then it just seemed to magicly work. No code changes.
It just did not like the name Explore for some reason so it seems. I am confused about it, but I guess I will leave at that as I can now do some real programming.
HoF, if you have time, why does the ACP not like the word Explore? Is it some sort of reserved word?
Hall of Famer
09-27-2014, 01:55 PM
Honestly I dont really know why the word 'Explore' wont work for you. I will try on my server when I have more time to see if I can reproduce this issue myself.
vBulletin® v3.8.11, Copyright ©2000-2025, vBulletin Solutions Inc.