HowtoForge Forums | HowtoForge - Linux Howtos and Tutorials

HowtoForge Forums | HowtoForge - Linux Howtos and Tutorials (http://www.howtoforge.com/forums/index.php)
-   Developers' Forum (http://www.howtoforge.com/forums/forumdisplay.php?f=33)
-   -   Questions about adding settings in Admin Section (http://www.howtoforge.com/forums/showthread.php?t=61689)

dclardy 2nd May 2013 05:46

Questions about adding settings in Admin Section
 
I know the thread title is a little broad, but I have a couple of questions about adding a section to the Admin section for a theme.

I would like to add some settings for my theme inside of the admin section of ISPConfig3. I was unable to get it to add dynamically so I had to hard code it for now. How can I get this to be added dynamically? Does the logic to check for admin.module.conf work in the theme folders as well?

It appears that it does, and I want to be sure that I am correct in that assumption.

The next question that I have is this, How do you query records from the database? This is the code that I am trying to use.

Code:

$logo = $app->db->queryOneRecord('SELECT logo_url FROM tpl_ispc_clean');

$form["tabs"]['basic'] = array (
        'title'        => "Basic Settings",
        'width'        => 80,
        'template'        => "templates/tpl_ispc-clean_basic.htm",
        'fields'        => array (
        ##################################
        # Beginn Datenbankfelder
        ##################################
                'logo_url' => array (
                        'datatype'        => 'VARCHAR',
                        'formtype'        => 'TEXT',
                        'validators'=> '',
                        'default'        => '',
                        'value'                => $logo,
                        'separator'        => '',
                        'width'                => '40',
                        'maxlength'        => '255'
                ),
        'sidebar_state' => array (
                        'datatype'        => 'INTEGER',
                        'formtype'        => 'TEXT',
                        'validators'=> '',
                        'default'        => '',
                        'value'                => $sidebar_state,
                        'separator'        => '',
                        'width'                => '40'
                ),
        ##################################
        # ENDE Datenbankfelder
        ##################################
        )
);

On my template file, I am calling that field, but it is not working.

Code:

<h2><tmpl_var name="tpl_ispc-clean_head_txt"></h2>
<p><tmpl_var name="tpl_ispc-clean_desc_txt"></p>

<div class="panel panel_system_config">
   
    <div class="pnl_formsarea">
        <fieldset class="inlineLabels"><legend>Basic Settings</legend>
            <div class="ctrlHolder">
                <label for="logo_url">{tmpl_var name='logo_url_txt'}Logo URL</label>
                <input name="logo_url" id="logo_url" value="{tmpl_var name='logo_url'}" size="50" maxlength="255" type="text" class="textInput" /> 152x46px
            </div>
            <div class="ctrlHolder">
                <label for="sidebar_state">{tmpl_var name='sidebar_state_txt'}Sidebar</label>
                <select class="selectInput" id="sidebar_state" name="sidebar_state">
                    <option value="0">Off</option>
                    <option value="1">On (Static)</option>
                    <option value="2">On (Retractable)</option>
                </select>
            </div>
        </fieldset>
        <input type="hidden" name="id" value="{tmpl_var name='id'}">
        <div class="buttonHolder buttons">
            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','admin/tpl_ispc-clean.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
            <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onclick="loadContent('admin/server_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
        </div>
    </div>
   
</div>

Right now, I am placing all of this inside of the admin module of ISPConfig3, but it appears that I can load this all from the theme. Is that correct? I would love to keep it there, if possible. I do not like making people have to copy files install ISPConfig3 directories.

Any help would be appreciated. I am just trying to make the theme that I created a little better than it currently is.

dclardy 2nd May 2013 07:27

After more investigation, I can't load it from the theme file. I guess that you can, but you have to make some changes to the requires stuff that it is kind of silly. ../../../../ It gets to be a lot after a few of those.

The menu is created from the admin->lib->menu.d-> directory. This can not be included in your theme.

I was unable to figure out how to write that query. If someone could help with that, I would be very glad. I am learning PHP so it is taking me a lot longer than it probably should to figure this out.

till 2nd May 2013 12:58

Quote:

Does the logic to check for admin.module.conf work in the theme folders as well?
No and thats intended as themes may not contain own form files or meny entries.

Quote:

but it appears that I can load this all from the theme.
No. Themes may not contain php files. Themes may only contain css files, images and form files.

There is a strict separation between code files which contain programming logic, they have to be placed inside the module folders and themes which contain only style and template files.

dclardy 2nd May 2013 13:43

Till,

Thanks for the information. I will include all the files in the admin section.

Can you help me with the query listed above? I am trying to pull a single value from a table I created. I don't see any examples of that inside of the code, and am kind of a beginner at PHP.

till 3rd May 2013 20:42

Replace the line:

'value' => $logo,

with:

'value' => $logo['logo_url'],

dclardy 3rd May 2013 22:21

Till,

Thanks for that information. How do I get this to become a variable in the template? I am trying to load the value inside of the .htm file.

Once I get this one done, I am sure that I will be able to figure the rest of them out.

Are there any places to go for templating help?

dclardy 4th May 2013 15:06

After looking through the files some, I thought that I had found the way to load the value. I put this code in my file.

Code:

class page_action extends tform_actions {

        //* Customisations for the page actions will be defined here
        function onShow() {
                global $app, $conf;
               
                $logo_sql = $app->db->queryOneRecord("SELECT * FROM `tpl_ispc_clean` where id = 1 ");
                $logo = $logo_sql['logo_url'];

                $app->tpl->setVar('logo_url', $logo);
               
                parent::onShow();
        }

}

This did not work for the admin pages.

I can get the information to show on the login page. I added a template variable inside of the index.php for that module.

Code:

$logo_sql = $app->db->queryOneRecord("SELECT * FROM `tpl_ispc_clean` where id = 1 ");
                $logo = $logo_sql['logo_url'];

                $app->tpl->setVar('error', $error);
        $app->tpl->setVar('pw_lost_txt', $app->lng('pw_lost_txt'));
                $app->tpl->setVar('username_txt', $app->lng('username_txt'));
                $app->tpl->setVar('password_txt', $app->lng('password_txt'));
                $app->tpl->setVar('login_button_txt', $app->lng('login_button_txt'));
                $app->tpl->setVar('logo_url', $logo);


dclardy 6th May 2013 22:29

Does anyone know what template tools ISPConfig uses? Is it using a readily available project for this or is it doing it on its own? I thought that it was using Smarty, but I don't think that it is. I could be completely wrong.

dclardy 7th May 2013 00:05

After even more finding, I can get it to save to the the database table now. The only issue is that it always inserts a new record instead of updating the data? How can I change that functionality? I need it to update here. Is there a parameter than I need to send that I am not.

tpl_ispc-clean_edit.php

Code:

<?php

/******************************************
* Begin Form configuration
******************************************/

$tform_def_file = "form/tpl_ispc-clean.tform.php";

/******************************************
* End Form configuration
******************************************/

require_once('../../lib/config.inc.php');
require_once('../../lib/app.inc.php');

//* Check permissions for module
$app->auth->check_module_permissions('admin');

// Loading classes
$app->uses('tpl,tform,tform_actions');
$app->load('tform_actions');

class page_action extends tform_actions {

}

$page = new page_action;
$page->onLoad();

?>

tpl_ispc-clean.tform.php
Code:

<?php

/*
        Form Definition

        Tabellendefinition

        Datentypen:
        - INTEGER (Wandelt Ausdrücke in Int um)
        - DOUBLE
        - CURRENCY (Formatiert Zahlen nach Währungsnotation)
        - VARCHAR (kein weiterer Format Check)
        - TEXT (kein weiterer Format Check)
        - DATE (Datumsformat, Timestamp Umwandlung)

        Formtype:
        - TEXT (normales Textfeld)
        - TEXTAREA (normales Textfeld)
        - PASSWORD (Feldinhalt wird nicht angezeigt)
        - SELECT (Gibt Werte als option Feld aus)
        - RADIO
        - CHECKBOX
        - FILE

        VALUE:
        - Wert oder Array

        Hinweis:
        Das ID-Feld ist nicht bei den Table Values einzufügen.


*/

$form["title"]                = "ISPC-Clean Theme Settings";
$form["description"]= "Basic Settings for the ISPC-Clean Theme";
$form["name"]                = "tpl_ispc-clean_settings";
$form["action"]                = "tpl_ispc-clean_edit.php";
$form["db_table"]        = "tpl_ispc_clean";
$form["db_table_idx"]        = "theme_settings_id";
$form["db_history"]        = "yes";
$form["tab_default"]= "basic";
$form["list_default"]        = "server_list.php";
$form["auth"]                = 'yes';

$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete

$theme_sql = $app->db->queryOneRecord("SELECT * FROM `tpl_ispc_clean` where theme_settings_id = 1 ");

$form["tabs"]['basic'] = array (
        'title'        => "Basic Settings",
        'width'        => 80,
        'template'        => "templates/tpl_ispc-clean_edit.htm",
        'fields'        => array (
        ##################################
        # Beginn Datenbankfelder
        ##################################
                'logo_url' => array (
                        'datatype'        => 'VARCHAR',
                        'formtype'        => 'TEXT',
                        'default'        => $theme_sql['logo_url'],
                        'value'                => '',
                        'separator'        => '',
                        'width'                => '40',
                        'maxlength'        => '255'
                ),
        'sidebar_state' => array (
                        'datatype'        => 'INTEGER',
                        'formtype'        => 'SELECT',
                        'default'        => $theme_sql['sidebar_state'],
                        'value'                => array(0 => 'Off', 1 => 'On'),
                ),
        ##################################
        # ENDE Datenbankfelder
        ##################################
        )
);

?>

tpl_ispc-clean_edit.htm
Code:

<h2><tmpl_var name="tpl_ispc-clean_head_txt"></h2>
<p><tmpl_var name="tpl_ispc-clean_desc_txt"></p>

<div class="panel panel_system_config">
   
    <div class="pnl_formsarea">
        <fieldset class="inlineLabels"><legend>Basic Settings</legend>
            <div class="ctrlHolder">
                <label for="logo_url"><tmpl_var name='logo_url_txt'></label>
                <input name="logo_url" id="logo_url" value="{tmpl_var name='logo_url'}" size="50" maxlength="255" type="text" class="textInput" />&nbsp; Size:&nbsp;152x46px
            </div>
            <div class="ctrlHolder">
                <label for="sidebar_state">{tmpl_var name='sidebar_state_txt'}</label>
                <select class="selectInput" id="sidebar_state" name="sidebar_state">
                    {tmpl_var name='sidebar_state'}
                </select>
            </div>
        </fieldset>
        {tmpl_var name='sidebar_state'}
        <input type="hidden" name="id" value="{tmpl_var name='id'}">

        <div class="buttonHolder buttons">
            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','admin/tpl_ispc-clean_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
            <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onclick="loadContent('admin/server_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
        </div>
    </div>
</div>

Please any help would be appreciated.

till 7th May 2013 12:47

You have to add the ?id=1 to the URL when you want to open up the first record in your table


All times are GMT +2. The time now is 17:44.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2014, vBulletin Solutions, Inc.