MateThemes Posted July 29, 2019 Share Posted July 29, 2019 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 More sharing options...
monchu Posted July 29, 2019 Share Posted July 29, 2019 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 More sharing options...
bernhard Posted July 29, 2019 Share Posted July 29, 2019 4 hours ago, MateThemes said: I tried some solutions for my topic but nothing seems to work 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/ ? Link to comment Share on other sites More sharing options...
MateThemes Posted July 30, 2019 Author Share Posted July 30, 2019 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 More sharing options...
rafaoski Posted July 30, 2019 Share Posted July 30, 2019 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 pagehttps://github.com/rafaoski/site-minimal 3 Link to comment Share on other sites More sharing options...
MateThemes Posted July 31, 2019 Author Share Posted July 31, 2019 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 pagehttps://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 More sharing options...
rafaoski Posted July 31, 2019 Share Posted July 31, 2019 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'); 1 Link to comment Share on other sites More sharing options...
MateThemes Posted August 7, 2019 Author Share Posted August 7, 2019 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! 1 Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now