Leaderboard
Popular Content
Showing content with the highest reputation on 07/07/2017 in all areas
-
This week we’ve got ProcessWire version 3.0.66, and this post takes an in-depth look at the new “Functional Fields” ProFields module, just released today… https://processwire.com/blog/posts/functional-fields/8 points
-
Hey everbody. I wanted to share something I have been working for quite some time, in total currently three premium Templates or Site-Profiles for ProcessWire 3 including a onepage template, a blog template and a blog+sidebar template. Here are some Quick Facts: Fully responsive Multilanguage support Full SEO support Optional Google Analytics Easily create new pages out of multiple predefined sections Lazyload the sections of a page [Group and update website-information into blogs] (blog, blog+sidebar) [Use tags to tag and group blog entries] (blog, blog+sidebar) [User-comments] (blog, blog+sidebar) [Create each page with or without sidebar] (blog+sidebar) Website-wide search by text or tags Password protect each page individually with sophisticated page-encryption with dummy texts and pixelated images Just go to https://pwtemplates.de to test the demos (e.g. blog-sidebar) and purchase them for a small expense allowance. Hope you like it!7 points
-
Markup CKEditor (for Form Builder) An inputfield for displaying markup editable via CKEditor. The module is intended for use with the Form Builder module. Allows blocks of static text to be included within a form, which can be edited in the form settings using CKEditor. Screenshots Usage Install the Markup CKEditor module. In the Form Builder module settings, add "MarkupCKEditor" to "Inputfield types to use with FormBuilder". In your form settings, add a new field of type "Markup CKEditor". Enter the text you want to show in this field using "Markup Text" on the "Details" tab. Configuration In the module config you can set items for the CKEditor toolbar that will apply to all Markup CKEditor fields. If you want to insert images in your markup field then add "Image" to the toolbar items to enable the standard CKEditor image plugin. The ProcessWire image plugin is not usable because in a FormBuilder form there is no page to store images in. Advanced There is a InputfieldMarkupCKEditor::ckeReady hookable method for users who want to do advanced customisation of the CKEditor inputfield. It receives three arguments: The InputfieldCKEditor object The form as a FormBuilderForm object The field as a FormBuilderField object Example $wire->addHookAfter('InputfieldMarkupCKEditor::ckeReady', function(HookEvent $event) { /** @var InputfieldCKEditor $cke */ $cke = $event->arguments(0); /** @var FormBuilderForm */ $form = $event->arguments(1); /** @var FormBuilderField $field */ $field = $event->arguments(2); if($form->name === 'test_form' && $field->name === 'my_cke_markup_field') { $cke->contentsCss = '/site/templates/MarkupCKEditor/contents.css'; $cke->stylesSet = 'ckstyles:/site/templates/MarkupCKEditor/ckstyles.js'; } }); http://modules.processwire.com/modules/inputfield-markup-ckeditor/ https://github.com/Toutouwai/InputfieldMarkupCKEditor6 points
-
Might not be the best thread for this, but as you mentioned tracy... Wanted to let @adrian know, we, his PW fans truly appreciate what he is doing promoting our beloved system.5 points
-
FieldtypeColor is on github Fieldtype stores a 32bit integer value reflecting a RGBA value. Input 5 types of Inputfields provided Html5 Inputfield of type='color' (if supported by browser) Inputfield type='text' expecting a 24bit hexcode string (RGB). Input format: '#4496dd'. The background color of the input field shows selected color Inputfield of type='text' expecting 32bit hexcode strings (RGB + alpha channel) Input format: '#fa4496dd' Inputfield with Spectrum Color Picker (Options modifiable) Inputfield type='text' with custom JavaScript and/or CSS (since version 1.0.3) Output Define output format under 'Details' tab in field settings. Select from the following 9 options string 6-digit hex color. Example: '#4496dd' string 8-digit hex color (limited browser support). Example: '#fa4496dd' string CSS color value RGB. Example: 'rgb(68, 100, 221)' string CSS color value RGB. Example: 'rgba(68, 100, 221, 0.98)' string CSS color value RGB. Example: 'hsl(227, 69.2%, 56.7%)' string CSS color value RGB. Example: 'hsla(227, 69.2%, 56.7%, 0.98)' string 32bit raw hex value. Example: 'fa4496dd'(unformatted output value) int 32bit. Example: '4198799069' (storage value) array() array( [0] => 0-255, // opacity [1],['r'] => 0-255, [2],['g'] => 0-255, [3],['b'] => 0-255, ['rx'] => 00-ff, ['gx'] => 00-ff, ['bx'] => 00-ff, ['ox'] => 00-ff, // opacity ['o'] => 0-1 // opacity ) The Fieldtype includes Spectrum Color Picker by Brian Grinstead SCREENSHOTS Input type=text with changing background and font color (for better contrast) Input type=color (in Firefox) Javascript based input (Spectrum Color Picker) Settings Output Settings Input3 points
-
Visual Page Selector version 003 (released (07/07/2017) Happy to announce that the latest release of Visual Page Selector is now available for Download/Purchase. Documentation is also complete! This is a major update. Visual Page Selector can now be used as a normal but enhanced page field! There are 2 views each for inputfield (page edit) and the page selector modal. These can be combined to suit your workflow as explained in the docs here. As a normal page field, you can opt to view the selected pages as a simple list and add pages to your page field using a ProcessWire Lister modal. This opens so many possibilities, including nuanced differentiation of pages to add to your page field, for example, making use of Lister columns and other page properties. For those that want to use Visual Page Selector as a 'one-page-per-image' solution, you can carry on as normal, with the added benefit of different view combinations In page edit, selectable pages are not loaded directly in the Inputfield allowing you to have hundreds of thousands, nay, unlimited numbers of selectable pages without experiencing any slowdowns (@note: What you see in the screenshot below is not AsmSelect or PageAutocomplete; just a custom list that blends in with the rest of ProcessWire). Please note that there were a few inevitable changes to the field settings. The Lister settings are now separated into individual settings. In addition, there was a typo in the 'vps-delete-page' permission. That should be 'vps-delete-pages'. Due to these, if upgrading from version < 3, please test thoroughly and fix any brokenness before using in production. If you need any help please let us know. Changelog Lister view for an enhanced page field experience. Combine different views as you wish. Faster Inputfield load times in page edit. UX changes. Lister and list view demo3 points
-
Hi everyone, I'm proud to share my first fieldtype module and I think it's a quite handy one It helps you to create all kinds of table/matrix inputs very quickly and easily. You have loads of options for customizing your field via plain javascript. See the handsontable docs for that Please consider this module ALPHA until i got some more time to test it. Any help would be highly appreciated Numbers are for example always tricky. Different locale settings, different types, rounding errors and so on... Download: https://gitlab.com/baumrock/FieldtypeHandsontable Result: Installation/Configuration: Just install the Fieldtype, add a field to your template and set the handsontable options in the fields details. If you have InputfieldAceExtended installed you will also have code highlighting for your code: Get data: If you retrieve the data from the API with outputformatting ON you have some helper methods available: getData() + getRows() get all data of the field getRow($row) get one special row, eg getRow(1) or getRow("2017") getCols() get all data but by columns not by rows getCol($col) get one special column, eg getCol(1) or getCol("mycolumnheader") You can also access rowHeaders and colHeaders directly (see examples) Simple Example: Caution: the examples below are outdated! see this post:2 points
-
@bernhard checkout VS Code, it's faster than atom (at least it was when I switched) and it's very similar to atom visually.2 points
-
you can use tracy and the console panel for that, not to get too independent from your favourite module builder2 points
-
2 points
-
@bernhard, for module AJAX calls I have used a replace hook on ProcessModule::executeEdit. In my JS I send an AJAX request to the module's config page, and in the hook I check that the request is coming via AJAX and has the required GET/POST variable(s) and if so I use $event->replace = true and return my response.2 points
-
@cjx2240, sorry to hear that. Can you give some more information please... Is the "who_we_are" field a Repeater Matrix field? Do you have the latest version of Repeater Matrix installed - v0.0.4? Do you have debug mode enabled in /site/config.php? If not please enable and let me know if you see any error messages when you try and edit the field. If you don't see any error messages still, please install Tracy Debugger, tick the "Backend" option for "Show Debug Bar", and check for errors when you try and edit the field, as in the screenshot below: Thanks.2 points
-
Update is out: https://github.com/blynx/MarkupProcesswirePhotoswipe Also removed the Pwpswp class alias, because it was pretty pointless. Processwire does not recognise it as a module and I don't really use static methods in that class. 0.5.1 - 2017/07/06, fixes removed: Removed pointless shortcut alias class fixed: Use of correct module/class name for file paths fixed: Configuration instructions for file paths other: Updated readme2 points
-
Hi, just stumbled over a little module that i built for my last project. it helped me to test performance of my rockdatatables module to generate 3000 random json datasets and i want to share it with you. maybe it saves some time for someone. https://gitlab.com/baumrock/RockDummyData/ easy example: $rdd = $modules->get('RockDummyData'); for($i=0; $i<15; $i++) { // this has to be inside the for-loop to always get a new dummy $dummy = $rdd->getDummy(); echo date("d.m.Y H:i:s", $dummy->timestamp) . "<br>"; } more advanced: $json = new stdClass(); $json->data = array(); $rdd = $modules->get('RockDummyData'); for($i=0; $i<3000; $i++) { // this has to be inside the for-loop to always get a new dummy $dummy = $rdd->getDummy(); $obj = new stdClass(); $obj->name = $dummy->forename . ' ' . $dummy->surname; $obj->position = $dummy->job; $obj->office = $dummy->city; $obj->color = $dummy->color; $obj->start_date = new stdClass(); $obj->start_date->display = date('d.m.Y',$dummy->timestamp); $obj->start_date->sort = $dummy->timestamp; $obj->salary = rand(0,10000); $json->data[] = $obj; } echo json_encode($json); you have to store your random datasets on your own into the /data folder. there are several services for creating all kinds of random data on the web - if you know one service that allows sharing those datasets let me know and i can include common needed data into the module2 points
-
Introducing our newest [commercial] module: Recurme Processwire Recurring Dates Field & Custom Calendar Module. http://www.99lime.com/modules/recurme/ One Field to Recur them ALL… A Recurring Dates InputField for your Processwire templates. The InputField you’ve been waiting for. Complex RRule date repeating in a simple and fast user interface. Use the super simple, & powerful API to output them into your templates. example: <? // easy to get recurring events $events = $recurme->find(); // events for this day $events = $recurme->day(); // events for this week $events = $recurme->week(); // events for this month $events = $recurme->month(); ?> <? // Loop through your events foreach($events as $event){ echo $event->title; echo $event->start_date; echo $event->rrule; echo $event->original->url; ... } ?> Unlimited Custom Calendars. Imagine you could create any calendar you wanted on your website. Use recurring events with the Recurme field, or use your own Processwire pages and date fields to render calendars… it’s up to you. Fully customizable. Make as many calendars as you like. Get events from anywhere. Recurme does all the hard date work for you. Unlimited Custom Admin Calendars too. Hope you like it , Joshua & Eduardo from 99Lime. ## [1.0.1] - 2017-05-29 ### changed - Fixed $options[weekStartDay] offset in Calendar - Fixed ->renderCalendar() Blank Days - Fixed missing ->renderList() [renderMonth][xAfter] - Removed ->renderCalendar() <table> attributes border, border-spacing - Fixed ->renderCalendar() excluded dates - Fixed rrule-giu.js exclude dates - Fixed ->renderList missing space in attr ID (shout out to @Juergen for multiple suggestions & feedback).1 point
-
Hej, A module which helps including Photoswipe and brings some modules for rendering gallery markup. Feedback highly appreciated (Also pull requests are appreciated ? - have a new Job now and don't work a lot with ProcessWire anymore, yet, feel free to contact me here or on GitHub, Im'm still "online"!) Modules directory: http://modules.processwire.com/modules/markup-processwire-photoswipe .zip download: https://github.com/blynx/MarkupProcesswirePhotoswipe/archive/master.zip You can add a photoswipe enabled thumbnail gallery / lightbox to your site like this. Just pass an image field to the renderGallery method: <?php $pwpswp = $modules->get('Pwpswp'); echo $pwpswp->renderGallery($page->nicePictures); Options are provided like so: <?php $galleryOptions = [ 'imageResizerOptions' => [ 'size' => '500x500' 'quality' => 70, 'upscaling' => false, 'cropping' => false ], 'loresResizerOptions' => [ 'size' => '500x500' 'quality' => 20, 'upscaling' => false, 'cropping' => false ], 'pswpOptions' => (object) [ 'shareEl' => false, 'indexIndicatorSep' => ' von ', 'closeOnScroll' => false ] ]; echo $pswp->renderGallery($page->images, $galleryOptions); More info about all that is in the readme: https://github.com/blynx/MarkupProcesswirePhotoswipe What do you think? Any ideas, bugs, critique, requests? cheers Steffen1 point
-
Hello fellow ProcessWire-ers. Here's another little project I've made: http://godesign.pt/ GOdesign is a, you've guessed it, design agency, in Portugal. I've been doing quite a few projects with them where they design, then I build. It's portuguese only, but it's just a design portfolio and little more. It was built with a modular approach that I've been applying to some projects lately. Building a project page you get a repeater, where at first you select the block type, and then the respective fields appear. That way the admin can do a block with a single image, two side by side, text on the left, text on the right, video, and so on... The approach is great, and makes me wonder how cool it would be to be able to create templates in PW that can be used in repeaters. Like creating pages, but in a repeater-like field instead of the actual tree.1 point
-
i wonder why one should want another editor than sublime …?1 point
-
Simple $var = $page->getUnformatted('field_name'); foreach ($var as $v) { //your markup //table column name $v->column_name }1 point
-
Yep, that sounds easy. Just thought I would try out something ready-made from my favourite module-builder)1 point
-
@Ivan Gretsky maybe you could just populate your pages via a little api script? I've never used adrian's module but maybe you can get the formatted values, create a new page and save it. then maybe a simple for does the trick...?1 point
-
I don't have time right now, but I don't expect it would take too much to make it work to populate the fields in the backend, instead of just displaying on the frontend. Probably just a matter of a config setting and a new hook (in addition to the current Fieldtype::formatValue) to get it to populate the backend form fields instead. Feel free to submit a PR1 point
-
2 approaches: Textformatter Use a textformatter like https://modules.processwire.com/modules/process-hanna-code/ or create your own. Use this as a starting point: https://modules.processwire.com/modules/textformatter-page-images/ CKEditor Plugin Use a Filefield to upload files. Enable pwlink module in your CKEditor which allows you to link PW pages and files too. Add a css class to show the icon1 point
-
I think the price of current Pro modules like around 150-200 USD for dev multi-site license is quite fine. If it solves the problem it should already be saving you lots of time and money!1 point
-
1 point
-
Hey szabesz. Thanks for you nice words and pointing out the z-index bug...just fixed it, thanks. And funny that you just mentioned UIkit I already planned to write a new template set based on UIkit (fantastic framework) and will most probably start with a wedding-theme.1 point
-
wihtin a repeater field (composers) i am using a second nested repeater field (works). For the first repeater item labels show up correctly as defined in the "details" Tab ( "#n: {lastname}" ). The second (sub) repeater constantly displays the label of the repeater field itself ("works") as labels of the items ( ignoring my user definition "#n: {work_title}" ). All items of the nested repeater are labeled in the same way ("works") Is it a bug or have i misunderstood anything? EDIT: meanwhile i found an identical issue reported on https://github.com/processwire/processwire-issues/issues/173 seems to be a bug, a possible workaround can be found in the link1 point
-
Thanks for letting me know. I have updated the module to set a minimum version requirement for FieldtypeRepeaterMatrix.1 point
-
1 point
-
thank you robin, this seems too complicated for my usecase. i'm working on a datatables fieldtype and i came up with this solution: private function getAjaxData() { $config = $this->wire->config; $input = $this->wire->input; // if the field is set AND the request was done via ajax we return the data of the table // if it was only the field variable it could have been requested as single field in a modal if($config->ajax AND $input->get->field === $this->name) { echo $this->getJSON(); die(); } } the data is requested via AJAX and the field is set. the further makes the field always load even if it is set to hidden+ajax - so i always get the json. don't think there's anything bad with this solution, but of course i'm happy to hear if im missing anything...1 point
-
No problem - like almost all things in processwire this could be set totaly free to your needs!1 point
-
1 point
-
@adrian unfortunately I couldn't find the reason for this. My workaround with the new user is still working, though. The install where the error occured is running on 3.0.42. I can't say if it was related to an update. Really stepping in the dark on this one...1 point
-
My company is hiring two full time positions that might be of interest to members of this forum as we build out our UX team. Among other things, we will be migrating a number of sites over to ProcessWire, developing a UI pattern library, and establishing a continuous improvement process for them. Lots of front end work but also some API development, PDF generation, and other fun stuff. These are multilingual sites (currently English, German, and Chinese, more languages to come) for a global company, but these positions are on site in our Cincinnati, Ohio corporate HQ. For more information, or to apply, see the following links: Web Developer http://www.michelmancareers.com/Opportunities/Americas/?gnk=job&gni=8a7880665cc36d5a015cc69d9b170b1e Digital Designer http://www.michelmancareers.com/Opportunities/Americas/?gnk=job&gni=8a7880665cc36d5a015cc69aa93008dc Thanks, Jason1 point
-
https://www.typografics.be/nl/blog/processwire-bigger-stronger-faster-en-easier1 point
-
1 point
-
Hi @itsberni - looks like that is a new issue in recent versions of PW. I have committed a fix which seems to take care of things here - can you please test and let me know if it works for you?1 point
-
would you mind adding my suggested features to your module? sorry for not making a PR, but you can just replace your render method with this one: /** * Render the entire markup returned from FieldtypeRuntimeMarkup * */ public function ___render() { //so that $page and $pages are locally scoped to the eval $process = $this->wire('process'); if($process && $process->className() == 'ProcessPageEdit') $page = $process->getPage(); $pages = $this->wire('pages'); // render files that are related to this field $root = rtrim($this->wire->config->paths->root,'/'); $file = '/site/modules/FieldtypeRuntimeMarkup/fields/' . $this->name; if(is_file($root.$file.'.php')) { // we found a file in the modules /fields folder, so render it $str = wireRenderFile($root.$file); } else { // no early reaturn because we load assets later if(!$this->runtimeFields) $str = ''; else $str = eval($this->runtimeFields); } // load assets related to this field if(is_file($root.$file.'.js')) $this->wire->config->scripts->add($file.'.js'); if(is_file($root.$file.'.css')) $this->wire->config->styles->add($file.'.css'); //since we are dealing with custom PHP code but also want to make sure that only markup is returned //if eval() returns anything other than a string or an integer, we throw an error (e.g. if an object or array is returned) if (is_string($str) || is_int($str)) return $str; else return $this->error($this->_('Only strings and integers should be returned by your custom code! Check if your code is valid.')); } this will render all files inside the folder /site/modules/FieldtypeRuntimeMarkup/ - your_field_name.php | .css | .js1 point
-
Hi, this is the diff which should help (before and after): -INSERT INTO `templates` VALUES (2,'admin',2,8,0,'{\"useRoles\":1,\"parentTemplates\":[2],\"allowPageNum\":1,\"redirectLogin\":23,\"slashUrls\":1,\"noGlobal\":1,\"compile\":3,\"modified\":1474288506,\"ns\":\"ProcessWire\"}'); +INSERT INTO `templates` VALUES (2,'admin',2,8,0,'{\"useRoles\":1,\"parentTemplates\":[2],\"allowPageNum\":1,\"redirectLogin\":23,\"https\":1,\"slashUrls\":1,\"noGlobal\":1,\"compile\":3,\"modified\":1498842443,\"ns\":\"ProcessWire\"}');1 point
-
How much does a gender reassignment surgery cost?1 point
-
This is the second site we've built for Visualization. The first launched some 5 years ago and was based on a different CMS (before we started working with PW). The site is fully responsive and features a 'quick quote system' using the FormBuilder module to manage quote requests and email both customer and site owners with the calculated quote. The prices for each part of the quote calculation are editable by the client in the CMS at any time. Every page features Meta Title and Description override option fields with tag content falling back to values based on the page's content if these are not filled in. Other than PW core v 3.0.42 additional modules are FormBuilder, ProCache and markupBlog. Any feedback welcome! http://www.avrackbuild.com/1 point
-
1 point
-
Hi, There is a list of reserved words which cannot be used for a Field, see: https://github.com/processwire/processwire/blob/master/wire/core/Fields.php#L36 I do not remember exactly when, but limit was added to this list, hence you cannot upgrade without first renaming the Field in question in the admin. You will probably need to change some code too, in order to accommodate to this change.1 point
-
I think there are good examples when page references are overkill, such as simple form options (list of countries, list of contact types in a simple contact form, etc...) As a rule of thumb I use this reasoning: am I absolutely sure I do NOT WANT more than simple options? If in doubt, I use page references just to make things extendable in the future.1 point
-
I built this one on bootstrap 4 with a number of extras. ie. Animate on scroll for photos and carousels, navbar animate on scroll, lightbox, google map embed, and font awesome. I am using the page tree as a row builder instead of navigation. I detached the menu system from the page tree to give more control on external links, single page website situations that need to link to sections, and add new window target options. It also lets you have different footer links vs header links this way. You can add something like a privacy policy to the footer and not the header and still have one place that controls your menus. Extensions used: Color Picker, Inputfield ACE Extended, Google map marker, MarkInPageTree, Media Library, and Hana Code.1 point
-
Sincerely hoping you're talking about the same CMS but two different ladies and not the opposite ?1 point
-
I've been a bit like the proverbial plumber with a leaky tap, with a rather ugly site myself, but I've had a period recently with very little work, so I thought it might be time to give my own site Create IT a refresh. I've got more work to do on it, but it's enough of a step up that I'm not totally embarrassed by it now. My site was running on a CMS I've developed myself since 1999 using an obscure language Mivascript, that was actually quite popular at the time, and my first exposure to a server scripting language. To put that in context, the first version of Wordpress only came out in 2003, and to be honest my code looks quite messy in the light of modern programming best practice. I've decided I'd rather focus on adding functionality and content than maintaining an entire CMS myself, and I love Processwire for its speed and flexibility of development. I had to import my existing content which was in a mySQL database. Having written the system myself, I knew the data structure well, so the issue was how to replicate the functionality. My old CMS was started before the days of SEO and security got a great deal of attention so I had urls like index.mvc?article=6. I had to come up with a safe way to redirect these to knew Processwire URLS. The Jumplinks module came to the rescue there, as when I'd imported my data, I'd already imported the old page ids into a field in processwire, so it ended up being pretty easy to provide automatic redirects from the old URLs with just a single jumplink using a selector. The other thing I wanted to do was use Bootstrap, but customise it without creating a mess of overrides. AIOM+ came to the rescue here, with its built in ability to compile LESS files. Rather than messing around with any third party LESS compiler, I could just put the Bootstrap source directly into my project and include the LESS files directly. Processwire never fails to impress how quickly and efficiently it enables often quite complex things to be done.1 point
-
Question: how much would soneone pay for this solution if it was mostly out-of-the-box ready for a multi site license?1 point
-
Yesterday we (Peter & Paul) launched two websites, Noiascape & Factory. Both a labour of absolute love. We are extremely proud of these and even more proud that our clients share our love for ProcessWire. Thanks for all your great work Ryan! Noiascape An architectural company based in London, Teatum & Teatum, came to us asking for a very different website promoting their unnamed development practice. Teatum & Teatum's creativity influences their buildings, we wanted to capture that in the name, brand & website we created. The name we came up with was Noia/Scape. Noia means new thinking, new approach and new direction. Scape means space, landscape, communities and places. http://www.noiascape.com Factory A multi-award winning sound design and audio facility in London, worked with us to come up with a creative idea to celebrate their 20th Anniversary. The original idea to reskin their website, turned into a rebuild using ProcessWire due to the massive improvement that ProcessWire could bring. Both to the front-end and the back-end. Factory are extremely happy with ProcessWire and are really glad they made the switch. It's always exciting when clients share our passion for ProcessWire. The main piece of work was to create art from sound and use this for a timeline of Factory's history. http://factory.uk.com Thanks Ryan & Community for all your great work and allowing front-end developers such as myself feel limitless when creating websites.1 point
-
Dear @kixe thanks a lot for this approach! Sorry to correct you, but in your code the config variable differs, it should be $config->editablePageLanguages in config.php I wrote a small module for this, please feel free to use it! LanguagesHideInput.module.php <?php namespace ProcessWire; class LanguagesHideInput extends WireData implements Module { public static function getModuleInfo() { return array( 'title' => 'Hide Languages Input', 'version' => 1, 'singular' => true, 'autoload' => 'template=admin', 'requires' => 'ProcessWire>=3.0.0', ); } public function init() { $this->addHookBefore('ProcessPageEdit::execute', function($event) { $this->message=$this->allLanguagesPages; $page = $event->object->getPage(); if (!$page->id || $page->id==1 || $page->template->flags == Template::flagSystem) return; if (array_key_exists($page->id, $this->allLanguagesPages)) return; foreach ($this->wire('languages') as $lang) { if ($lang->isDefault() || in_array($lang->id, $this->defaultLanguages)) continue; $lang = $this->wire('languages')->get($lang->id); $lang->status = Page::statusHidden; } $this->wire('languages')->reloadLanguages(); }); } } LanguagesHideInput.config.php <?php namespace ProcessWire; class LanguagesHideInputConfig extends ModuleConfig { public function __construct() { $langs = []; foreach (wire('languages') as $language) { if ($language->name == "default") continue; $langs[$language->id] = ($language->title); } $this->add(array( 'defaultLanguages' => array( 'label' => __('Default Languages'), 'type' => 'Checkboxes', 'options' => $langs, 'value' => [], 'description' => __('Select the languages you want to show, others are hidden.'), ), 'allLanguagesPages' => array( 'type' => 'PageListSelectMultiple', 'label' => __('Exclusions'), 'description' => __('On these pages all the langauges will appear.'), ), )); } }1 point