Jump to content

Admin Page without Module


MateThemes
 Share

Recommended Posts

Hello everyone!

I have searched the forum for quite a long time and I tried some solutions for my topic but nothing seems to work.

I need to create a Settings Page and for a native feeling I want to create it under the main navigation on top. The settings page should hold the Main Logo, some styling and other settings. As I said nothing seems to work for me. I tried to create a Page under Admin with Admin Template and ProcessPageEdit but then I can't assign an image field. 

I don't want to write a module because it is to much work for only 3 settings.

I hope someone of the forum could help me out!

Have a nice day!

Link to comment
Share on other sites

You only need to create a hidden page with blank template let say settings, then put all settings in that page:

$page->rootParent()->child('template=settings, include=hidden');

or put it in _init.php:

$mySettings = $page->rootParent()->child('template=settings, include=hidden');

Link to comment
Share on other sites

18 hours ago, bernhard said:

Hi,

it would be helpful for everybody to list what you've tried and what did not work and why 😉 

What about https://modules.processwire.com/modules/settings-factory/ ?

As I described in short, I tried it with a custom settings page (with a blank template) under admin. But then no Fields were assigned. I tried it this way because I want to have a native feeling for the settings and the page should appear under the main navigation.

Is there any detailed tutorial for my purpose? I didn't find any.

I didn't know the module "settings factory" I will give it a try.

Link to comment
Share on other sites

Hi ... Jonathan Lahijani has a great tutorial on youtube that can help you

Simply put, you need to create an option template,
then add 2 pages, one in the page tree named options, to which you choose the option template, and under the admin add another page and change the name, for example (admin_options), so that the names are not identical. Choose a process named ProcessPageEdit and save the page ...
in admin.php paste the code

// Custom Options Page
if( page()->name == 'admin_options' ) input()->get->id = pages()->get('options')->id;

Finally, you can add some css to hide the options page in the page tree.

/** Hook Admin Custom CSS */
$wire->addHookAfter('Page::render', function($event) {
	if(page()->template != 'admin') return; // Check if is Admin Panel
	$value  = $event->return; // Return Content
	$templates = urls()->templates; // Get Template folder URL
	$style = "<link rel='stylesheet' href='{$templates}assets/css/admin.css'>"; // Add Style inside bottom head
	$event->return = str_replace("</head>", "\n\t$style</head>", $value); // Return All Changes
});

You can also download the profile that has the option page created and see how you can create your own options page
https://github.com/rafaoski/site-minimal

 

  • Like 3
Link to comment
Share on other sites

18 hours ago, rafaoski said:

Hi ... Jonathan Lahijani has a great tutorial on youtube that can help you

Simply put, you need to create an option template,
then add 2 pages, one in the page tree named options, to which you choose the option template, and under the admin add another page and change the name, for example (admin_options), so that the names are not identical. Choose a process named ProcessPageEdit and save the page ...
in admin.php paste the code


// Custom Options Page
if( page()->name == 'admin_options' ) input()->get->id = pages()->get('options')->id;

Finally, you can add some css to hide the options page in the page tree.


/** Hook Admin Custom CSS */
$wire->addHookAfter('Page::render', function($event) {
	if(page()->template != 'admin') return; // Check if is Admin Panel
	$value  = $event->return; // Return Content
	$templates = urls()->templates; // Get Template folder URL
	$style = "<link rel='stylesheet' href='{$templates}assets/css/admin.css'>"; // Add Style inside bottom head
	$event->return = str_replace("</head>", "\n\t$style</head>", $value); // Return All Changes
});

You can also download the profile that has the option page created and see how you can create your own options page
https://github.com/rafaoski/site-minimal

 

Hello!!!

Thank you for the share. This is what I need!!!

What is the best way to get the fields in the template if you want to access them? 

Link to comment
Share on other sites

The easiest way is to set the options page in the _init.php file:

$siteOptions = $pages->get('/options/');

// If you set setFunctionsAPI ( $config->useFunctionsAPI = true;  ) to true in the configuration file, you can display them in the template in this way

$siteOptions = pages()->get('/options/');

//or
$siteOptions = pages('/options/');

Then in the template just display the fields:

<h1><?= $siteOptions->site_name ?></h1>

<?php
// In the field settings you should select to display a single image
if ($siteOptions->logo): ?>

	<img src="<?= $siteOptions->logo->url ?>" width='100' alt="<?= $siteOptions->logo->description ?>">

<?php endif ?>

Or add new “Unique” status for pages https://processwire.com/blog/posts/pw-3.0.127/
Add this status to the Options page and in the _init.php file get this way:

$siteOptions = pages()->get('options');

// or
$siteOptions = pages('options');

 

 

  • Like 1
Link to comment
Share on other sites

On 7/31/2019 at 7:54 AM, rafaoski said:

The easiest way is to set the options page in the _init.php file:


$siteOptions = $pages->get('/options/');

// If you set setFunctionsAPI ( $config->useFunctionsAPI = true;  ) to true in the configuration file, you can display them in the template in this way

$siteOptions = pages()->get('/options/');

//or
$siteOptions = pages('/options/');

Then in the template just display the fields:


<h1><?= $siteOptions->site_name ?></h1>

<?php
// In the field settings you should select to display a single image
if ($siteOptions->logo): ?>

	<img src="<?= $siteOptions->logo->url ?>" width='100' alt="<?= $siteOptions->logo->description ?>">

<?php endif ?>

Or add new “Unique” status for pages https://processwire.com/blog/posts/pw-3.0.127/
Add this status to the Options page and in the _init.php file get this way:


$siteOptions = pages()->get('options');

// or
$siteOptions = pages('options');

 

 

Hello!!!

Thank you very much for your help!!! It works now like a charm!

  • Like 1
Link to comment
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
 Share

×
×
  • Create New...