Leaderboard
Popular Content
Showing content with the highest reputation on 03/13/2017 in all areas
-
Put this in your site/ready.php file: $this->addHookAfter('Session::loginSuccess', null, function($event) { if($this->wire('user')->hasRole("target-role")) $this->wire('session')->redirect("other-url"); });6 points
-
If the details are not covered by an NDA, maybe you could share them publicly in this very topic5 points
-
@ottogal Independently of the opportunity of this suggestion, It doesn't sound at all like @theoretic is joking, you can see that there is some thought and work in that logo either you like it or not. There's too much trolling going around the world these days, let's try to keep this little corner of ours a nice and constructive place. I'm not trying to bash you down, but please try to be a bit more explicit about what you didn't like when criticizing someone else's post. @theoretic you might want to go through this thread to get a feeling of what was already discussed about this subject4 points
-
3 points
-
Oh man, I've made a stupid mistake. I didn't have AutoComplete included in the list of accepted field types for the Page Inputfield. So AutoComplete wasn't appearing as an option for any of my Page fields, regardless of parentage. In fact, it looks like AutoComplete now works perfectly, with any parent or selector you want. Man, Processwire just reads my mind. Thanks Ryan and community once again For anyone with a similar issue, just go to Modules, scroll down to Page, click Settings, and add PageAutocomplete to the list of "Inputfield modules available for page selection."3 points
-
Yes. Put the following code in your /site/ready.php <?php $this->addHookBefore('YourClass::renderImage', function ($e) { $image = $e->arguments(0); $image->requiredDimensions = '100x100'; $e->arguments(0, $image); }); or wire()->addHookBefore('YourClass::renderImage', null, 'beforeRenderImage'); function beforeRenderImage($e) { $image = $e->arguments(0); $image->requiredDimensions = '100x100'; $e->arguments(0, $image); } Read docs about hooks: https://processwire.com/api/hooks/3 points
-
@Robin S , thanks for your reply. I just filled a request for that: https://github.com/processwire/processwire-requests/issues/843 points
-
Hi, I have created a site profile that shows how to integrate ProcessWire 3.0 with Vue 2.0. See repository here. How this site profile works This ProcessWire site profile is loosely based on the REST API tutorial by @gebeer. Here are the most important steps to reproduce it: Admin settings Create an api template with default settings and just the title field assigned to it. Refer to @gebeer tutorial for further details Create a pages and nav templates with just the title field, for both template tick “Allow URL Segments” in the “URLs” tab (see attachment) Create a home template, this is going to be the single php file that will load your Vue SPA. Assign this template to the root of your website Any other template you create should have the “Alternate Template Filename” field in the “Files” tab set as home (see attachment), in this way if a user enter the website from any url that is not the root, ProcessWire will always redirect to the home template, Vue router will handle the url and call the right data through the REST API Under the root, create an api page and assign the api template to it (you can set “hidden” to this page so doesn't show up in the menu) Under the api page, create the pages nav and pages (see attachment), and assign the templates nav and pages to them. Now you have the www.sitename.com/api/pages and www.sitename.com/api/nav urls that you can use to fetch the JSON data PHP template setup In the templates folder, create home.php file and leave it empty, the HTML will be generated by webpack Now create pages.php and nav.php files. On these files is where we return the JSON data, based on the right url segment. Again, refer to @gebeer tutorial for further details on this matter. Note that I wrote a PageFields class that I use on these templates to fetch ProcessWire fields. The fields that are supported are text, textarea, repeater, img. Other fields may work but I haven't tested them. See the REST API setup for further details about how to use the PageFields class REST API setup You can decide what fields are included and what fields are excluded by passing a configuration array to the PageFields class. You can find here a list of the available configuration settings. See examples below. Show only selected core fields: $pageFields = new PageFields($p, [ 'fld_core_included' => ['url', 'httpUrl', 'template'] ]); Show no global fields, and only selected custom fields: $pageFields = new PageFields($p, [ 'fld_core_included' => [], 'fld_include_all' => false, 'fld_included' => ['title', 'gallery'], ]); On a gallery image field, hide breakpoint listing and show only httpUrl field: $pageFields = new PageFields($p, [ 'img_fld_overrides' => [ 'gallery' => [ 'fields' => ['httpUrl'], 'bp_list' => false ] ], ]); Webpack setup The most important file of all Webpack setup is config/index.js. On line 33 you need to provide your domain name so that Webpack can proxy the ProcessWire REST API to the Webpack dev server. Without this you wouldn't be able to take advandage of the Webpack hot module replacement feature which allows you to reload a vue module without refreshing the page, it also allows you to keep the state of the app. Notes My REST API may have bugs, this is just an example of an integration with ProcessWire, I suggest you either build your own REST API or use the awesome GraphQL module by @Nurguly Ashyrov. Todo Replace REST API with the GraphQL module. This requires vue-apollo, the Apollo/GraphQL integration with Vue, and vue-supply for integration with Vuex.2 points
-
Just because it's Monday: <?php /** * ProcessWire module. * * Allow depending modules to be updated from non-standard repositories. * * In absence of this module, your module will continue to work but updates * will point at the regular repository. If you want to avoid that, add * a "requires" entry in your module * * To trigger the custom update routines, add an array "extendedUpdate" to * your getModuleInfo array. It can either contain a "url" entry with the * URL to the JSON data that describes the available update, or a "customMethod" * entry with the name of a public method in your module that returns that * URL. * * If you go the "url" way, the value there is run through wirePopulateStringTags. * You can add placeholders for all of the modules moduleInfo values, the module's * configuration values, the "moduleServiceKey" (PW base version, i.e. pw300, pw280 etc.) * and the module's name as, yeah, you guessed it, "name". * * If you use customMethod, it gets passed an associative array with all these values. * * A simple example for a module using custom updates: * * class TestModule extends WireData implements Module { * public static function getModuleInfo() { * return array( * "title" => _("Test Module"), * "summary" => _("Test for a module with a custom update location"), * "version" => "0.0.1", * "requires" => array("ModuleUpdateCustomUrl"), * "extendedUpdate" => array( * "url" => "https://bitpoet.ddns.net/update/{name}.json?apiVersion={moduleServiceKey}", * // Alternative way to generate the URL through a method in your module: * //"customMethod" => "generateUrl" * ) * ); * } * * public function generateUrl($data) { * return "https://bitpoet.ddns.net/update/" . $data['name'] . ".json?apiVersion=" . $data['moduleServiceKey']; * } * * } * * * A somewhat minimal JSON example response for the test module above: * { * "status":"success", * "class_name":"TestModule", * "module_version":"0.0.2", * "authors":[ * { * "title":"BitPoet" * }, * { * "title":"Anonymous" * } * ], * "pw_versions":[ * { * "name":"2.7" * }, * { * "name":"2.8" * }, * { * "name":"3.0" * } * ], * "download_url":"https://bitpoet.ddns.net/update/TestModule_0.0.2.zip", * "release_state":{ * "title":"Beta" * }, * "summary":"Test for a module with a custom update location", * "module_home":"https://bitpoet.ddns.org/modules/TestModule" * } * * For a complete example, see the live data from the official repo, e.g. * http://modules.processwire.com/export-json/Helloworld/?apikey=pw300 * * The response must either return a property "success" with a true value * or populate an "error" property with a description of what went wrong. * */ class ModuleUpdateCustomUrl extends WireData implements Module { public static function getModuleInfo() { return array( "title" => _("Module Update from Custom Url"), "summary" => _("Extension module that allows modules to be updated from non-standard repos."), "version" => "0.0.4", "autoload" => true, ); } public function init() { $this->addHookBefore("ProcessModule::execute", $this, "hookProcessModuleExecute_customUpdate"); } public function hookProcessModuleExecute_customUpdate(HookEvent $event) { if($this->input->get->update) { $name = $this->sanitizer->name($this->input->get->update); $info = $this->modules->getModuleInfo($name); if(! $info["extendedUpdate"]) return; if(! isset($info["extendedUpdate"]["url"]) && !isset($info["extendedUpdate"]["customMethod"])) { $this->error($this->_('Neither URL nor custom method set in extendedUpdate configuration in module info')); return; } $event->return = $this->downloadDialog($name, $info); $event->replace = true; } } public function downloadDialog($name, $info) { $redirectURL = "./edit?name=$name"; $className = $name; $cfgdata = $this->modules->getModuleConfigData($name); $params = array_merge($info, $cfgdata); $params["moduleServiceKey"] = $this->wire('sanitizer')->name($this->wire('config')->moduleServiceKey); $params["name"] = $name; if(isset($info["extendedUpdate"]["customMethod"])) { $method = $info["extendedUpdate"]["customMethod"]; $module = $this->modules->get($name); $url = $module->$method($params); } else { $url = trim(wirePopulateStringTags($info["extendedUpdate"]["url"], $params)); } $http = $this->wire(new WireHttp()); $data = $http->get($url); if(empty($data)) { $this->error($this->_('Error retrieving data from web service URL') . ' - ' . $http->getError()); return $this->session->redirect($redirectURL); } $data = json_decode($data, true); if(empty($data)) { $this->error($this->_('Error decoding JSON from web service')); return $this->session->redirect($redirectURL); } if($data['status'] !== 'success') { $this->error($this->_('Error reported by web service:') . ' ' . $this->wire('sanitizer')->entities($data['error'])); return $this->session->redirect($redirectURL); } $form = $this->buildDownloadConfirmForm($data); return $form->render(); } public function buildDownloadConfirmForm($data) { $warnings = array(); $authors = ''; foreach($data['authors'] as $author) $authors .= $author['title'] . ", "; $authors = rtrim($authors, ", "); $compat = ''; $isCompat = false; $myVersion = substr($this->wire('config')->version, 0, 3); foreach($data['pw_versions'] as $v) { $compat .= $v['name'] . ", "; if(version_compare($v['name'], $myVersion) >= 0) $isCompat = true; } $compat = trim($compat, ", "); if(!$isCompat) $warnings[] = $this->_('This module does not indicate compatibility with this version of ProcessWire. It may still work, but you may want to check with the module author.'); $form = $this->wire('modules')->get('InputfieldForm'); $form->attr('action', './download/'); $form->attr('method', 'post'); $form->attr('id', 'ModuleInfo'); $markup = $this->wire('modules')->get('InputfieldMarkup'); $form->add($markup); $installed = $this->modules->isInstalled($data['class_name']) ? $this->modules->getModuleInfoVerbose($data['class_name']) : null; $moduleVersionNote = ''; if($installed) { $installedVersion = $this->formatVersion($installed['version']); if($installedVersion == $data['module_version']) { $note = $this->_('Current installed version is already up-to-date'); $installedVersion .= ' - ' . $note; $this->message($note); $this->session->redirect("./edit?name=$data[class_name]"); } else { if(version_compare($installedVersion, $data['module_version']) < 0) { $this->message($this->_('An update to this module is available!')); } else { $moduleVersionNote = " <span class='ui-state-error-text'>(" . $this->_('older than the one you already have installed!') . ")</span>"; } } } else { $installedVersion = $this->_x('Not yet', 'install-table'); } $table = $this->wire('modules')->get('MarkupAdminDataTable'); $table->setEncodeEntities(false); $table->row(array($this->_x('Class', 'install-table'), $this->wire('sanitizer')->entities($data['class_name']))); $table->row(array($this->_x('Version', 'install-table'), $this->wire('sanitizer')->entities($data['module_version']) . $moduleVersionNote)); $table->row(array($this->_x('Installed?', 'install-table'), $installedVersion)); $table->row(array($this->_x('Authors', 'install-table'), $this->wire('sanitizer')->entities($authors))); $table->row(array($this->_x('Summary', 'install-table'), $this->wire('sanitizer')->entities($data['summary']))); $table->row(array($this->_x('Release State', 'install-table'), $this->wire('sanitizer')->entities($data['release_state']['title']))); $table->row(array($this->_x('Compatibility', 'install-table'), $this->wire('sanitizer')->entities($compat))); // $this->message("<pre>" . print_r($data, true) . "</pre>", Notice::allowMarkup); $installable = true; if(!empty($data['requires_versions'])) { $requiresVersions = array(); foreach($data['requires_versions'] as $name => $requires) { list($op, $ver) = $requires; $label = $ver ? $this->sanitizer->entities("$name $op $ver") : $this->sanitizer->entities($name); if($this->modules->isInstalled("$name$op$ver") || in_array($name, $data['installs'])) { // installed $requiresVersions[] = "$label <i class='fa fa-fw fa-thumbs-up'></i>"; } else if($this->modules->isInstalled($name)) { // installed, but version isn't adequate $installable = false; $info = $this->modules->getModuleInfo($name); $requiresVersions[] = $this->sanitizer->entities($name) . " " . $this->modules->formatVersion($info['version']) . " " . "<span class='ui-state-error-text'>" . $this->sanitizer->entities("$op $ver") . " " . "<i class='fa fa-fw fa-thumbs-down'></i></span>"; } else { // not installed at all $requiresVersions[] = "<span class='ui-state-error-text'>$label <i class='fa fa-fw fa-thumbs-down'></i></span>"; $installable = false; } } $table->row(array($this->_("Requires"), implode('<br />', $requiresVersions))); if(!$installable) $this->error("Module is not installable because not all required dependencies are currently met."); } if(!empty($data['installs'])) { $installs = $this->sanitizer->entities(implode("\n", $data['installs'])); $table->row(array($this->_("Installs"), nl2br($installs))); } $links = array(); $moduleName = $this->wire('sanitizer')->entities1($data['name']); if($data['module_home']) { $moduleURL = $this->wire('sanitizer')->entities($data['forum_url']); $links[] = "<a target='_blank' href='$moduleURL'>" . $this->_('More Information') . "</a>"; } if($data['project_url']) { $projectURL = $this->wire('sanitizer')->entities($data['project_url']); $links[] = "<a target='_blank' href='$projectURL'>" . $this->_('Project Page') . "</a>"; } if($data['forum_url']) { $forumURL = $this->wire('sanitizer')->entities($data['forum_url']); $links[] = "<a target='_blank' href='$forumURL'>" . $this->_('Support Page') . "</a>"; } if(count($links)) $table->row(array($this->_x('Links', 'install-table'), implode(' / ', $links))); if($data['download_url']) { $downloadURL = $this->wire('sanitizer')->entities($data['download_url']); $table->row(array($this->_x('ZIP file', 'install-table'), $downloadURL)); $warnings[] = $this->_('Ensure that you trust the source of the ZIP file above before continuing!'); } else { $warnings[] = $this->_('This module has no download URL specified and must be installed manually.'); } foreach($warnings as $warning) { $table->row(array($this->_x('Please Note', 'install-table'), "<strong class='ui-state-error-text'> $warning</strong>")); } $markup->value = $table->render(); if($installable && $data['download_url']) { $btn = $this->wire('modules')->get('InputfieldSubmit'); $btn->attr('id+name', 'godownload'); $btn->value = $this->_("Download and install"); $btn->icon = 'cloud-download'; $btn->value .= " ($data[module_version])"; $form->add($btn); $this->session->ProcessModuleDownloadURL = $data['download_url']; $this->session->ProcessModuleClassName = $data['class_name']; } else { $this->session->remove('ProcessModuleDownloadURL'); $this->session->remove('ProcessModuleClassName'); } $btn = $this->wire('modules')->get('InputfieldButton'); $btn->attr('name', 'cancel'); $btn->href ="./edit?name=$data[class_name]"; $btn->value = $this->_("Cancel"); $btn->icon = 'times-circle'; $btn->class .= ' ui-priority-secondary'; $form->add($btn); $form->description = $this->wire('sanitizer')->entities($data['title']); return $form; } /** * Format a module version number from 999 to 9.9.9 * * @param string $version * @return string * */ protected function formatVersion($version) { return $this->wire('modules')->formatVersion($version); } } Created with massive theft of code from ProcessModule.module I'm going to toy around with this in our local environment and see if I can stitch together a nice workflow with the local git repo and a post-receive hook (once I find the time).2 points
-
Thank you @kixe I managed to achieve what I need. Any idea what the key (pw300/pw200) is doing? For whoever is interested. In my module I added public function init() { wire()->addHookBefore("ProcessModule::execute", $this, "changeModuleService"); } public function changeModuleService(HookEvent $event) { if($_GET["update"] === "ModuleName") { wire("config")->moduleServiceURL = "http://domain.tld/"; wire("config")->moduleServiceKey = (__NAMESPACE__ ? "pw300" : "pw280"); } } And the module autoload property is set to "autoload" => "path=/admin/module/" Now whenever the "check for updates" link is clicked it searches for a new version on domain.tld/ModuleName, this has to return a json similar to the one posted above.2 points
-
I just finished a medium sized website/SPA using processwire and vue with vue router and vuex. Has lots of nice features like server side rendering, happy to share details with people if they'd be interested. Shoot me a PM.2 points
-
@theoretic - Thank you for spending some time on this. Whether or not a logo decision has been made (which it has), it is great to see folks interested in the topic that are willing to contribute -- so thank you for that. There's also a thread regarding a new website, which I opened in January last year for the purposes of sharing design ideas: As mentioned by @LostKobrakai, Ryan will be spearheading this. With that said, please feel free to share any ideas you may have about the new site on that thread. (The two threads mentioned herein are the ones we should focus on to keep everything centralised.) Thanks again for your input.2 points
-
2 points
-
Hi all, My first – hopefully useful – ProcessWire related tutorial: http://szabesz.hu/blog/install-processwire-in-a-subfolder-on-shared-hosting-cpanel_ins-sub/2 points
-
ProcessPageListerUrls Create links to specific ListerPages with predefined selector, column and sort settings. See GitHub for more information. Download ProcessPageListerUrls on GitHub1 point
-
Hi all and thanks again for a perfect product! I'm glad to see Processwire growing and becoming a strong, popular product. The new look of admin interface (uikit-based) is nice and minimalistic. Maybe it's the starting point to think about the consistent identity for the whole Processwire project. The only thing which is more or less consistent now is the main Processwire color. Somewhate between red and maroon, I call it "Thai color" because it's very popular in Thailand. You meet this color at almost any page related to Processwire, and it's good because this color is very distinctive. But what's about PW logo? There's no consistency. And, i'm unhappy to reveal it, the PW logo (at least the sign, not the text part) is not absolutely original. There are at least three different Processwire logos: The text part of logo at PW homepage (and pure-textual logo in most admin themes, e.g. Reno). The sign part of logo present at PW homepage. The new logo (only sign, textless) present in the new Uikit admin theme. For sure it's too much. A single, unique, consistent logo could be better. As to the sign -- small b in circle -- just look at Beats Audio logo which is very similar. And even worse: there's a CMS which is very popular in Russia and called Bitrix, and it has a very similar logo. So i would like to propose another vision of PW logo. Unique, original, but being inherited from current PW logos. It's only a first approach, will be glad to polish it in case of positive feedback. And thanks again for a great product!1 point
-
Done! I'm glad I could be useful on spotting this.1 point
-
1 point
-
1 point
-
Hook after ProcessLogin::afterLogin and there, if $this->user->roles has a match, do a $this->session->redirect().1 point
-
You could take a look at http://php.net/manual/en/class.numberformatter.php1 point
-
#3 try "reloaded" event on the input field. You might check code in aos, eg for inputfieldurlchecker.1 point
-
Hey y'all! I've been digging through the forums trying to find a workaround for the Page AutoComplete Field. So far, no luck. Here's the problem: Currently, to use the Page AutoComplete Field, you have to define a single parent for the pages you want to select from. I want to use the AutoComplete field to add multiple pages from different parents. For instance, I have a field for location, and I want to add the MET Museum and The Louvre, but the MET has parent USA, and the Louvre has parent France. Currently, it's very labor intensive to scroll through a list of 300+ locations, or use AsmSelect to drill down. AutoComplete would be a godsend. I've not been able to find any way to workaround this issue, any ideas? Thanks for any help or recommendations! — Reed1 point
-
Thanks again Adrian for your modules. Indeed. I was expecting to see this option in BCE's edit mode, but as the superuser's language was French (default) at that moment it wasn't displayed (which seems normal) and I didn't think of checking it with English. As for Admin Actions, I didn't think of going there after to see if there was an action that could do the job, even though (I think) I felt (a bit) it could be the case. Perhaps it seemed too good to be true, or after not finding it (logically) via BCE I just thought of doing it manually as quickly as possible.1 point
-
Thanks @adrian that worked for me - was getting 'Error loading GitHub branches' etc, but only for core. That fixed it. <edit>..or at least it did temporarily. It let me upgrade the core (3.0.42 => 3.0.55) and install the new Uikit admin, and now it's back to saying there's a 403 error loading the core repository. Hmmm.</edit>1 point
-
What about the "Active" column in BCE's edit mode - you should be able to activate the current language (selected in your profile) for all pages at once with this. Another option is the "Page Active Languages Batcher" in the AdminActions module, which lets you enable or disable active status of multiple languages on multiple pages at once.1 point
-
Check out Browser History API (History.pushState()) that helps you change the url using JS and PJAX libraries that do the heavy lifting for you. Here's one (I haven't used) https://github.com/defunkt/jquery-pjax for History API https://developer.mozilla.org/en/docs/Web/API/History1 point
-
Only thing what comes to my mind is different user rights!? Can you somehow log user name / role for the different scenarios? (Maybe by temporarily add a log into the send function)1 point
-
Dave - you were right, there was a module (LoginNotifier) that was in here, and as soon as I removed that I removed the lengthy processing time, however it still is processing the login form and just coming back to the login form with no errors/messages. I'll see if I can get Tracy Debugger working, not familiar w/ how it works and getting it installed, but I'll see what I can do. In the meantime, if anyone has any recommendations, please let me know. Thanks!1 point
-
Read this http://modules.processwire.com/export-json/ You have the option to change the following in your config.php $config->moduleServiceURL = 'http://modules.processwire.com/export-json/'; $config->moduleServiceKey = (__NAMESPACE__ ? 'pw300' : 'pw280'); Example for a request http://modules.processwire.com/export-json/FieldtypeSelectExtOption/?apikey=pw300 created from moduleServiceURL, ModuleClassName, moduleServiceKey (GET Parameter)1 point
-
Thank you so much @kixe! The solution was "right in front of me" but I wasn't seeing it. I imported the data from a csv file (before a LibreOffice Writer table that I copied/pasted in a Calc Spreadsheet) with the help of Import Pages from CSV files (first time using it also). And later used Batch Child Editor (perhaps first time also) to hide them all at once and do another operation. But the children pages are only hidden, not unpublished. If not hidden, by default with the site profile used, I have them all displayed as links, so I just hide them. And hidding them also rapidly makes them less "emphasized" in the backend. I've just had to activate the English language now manually for the 27 pages, one by one... I wonder if I still need the language-checking pieces of code already in place, but as it works I won't try it now and remove them for this project.1 point
-
OK sure -makes sense to add tags to files, will work on it asap.. #1, it is sort of a hack, since there needs to be a value in the field for it to work right; i never really figured out how to fix that one, but might be able to now. for #2, i always thought that PHP_EOL would be environment neutral, because it is the constant for new line, independent of platform, but i guess it may not work in the context of exploding the newlines from a textarea, so i will change that. #3 - yes, don't know how to fix that AJAX thing, maybe i need to change from document.ready to something else, will look into it;1 point
-
If the parent page is the adminRootPage (pageID = 2) a tab is automatically created.1 point
-
Hi GKrabach, and welcome. Is it possible to see what is causing sendmail to be invoked? Normally, an admin login doesn't send an email. Is there a specific module (usually in /site/modules/) installed that is doing this? You seem quite comfortable with all this stuff, so it might be worth installing Tracy Debugger as it can be enormously useful.1 point
-
I am talking about the pages with template 'grille-tarifaire' (values of your page table). Check under settings tab: access, status and if second language is enabled (checked). Why did you set the page status to hidden? If you want to show the values you need to publish the page. The page is anyway not accesible directly if you don't have a template file 'grille-tarifaire' for the output.1 point
-
This is really strange. What other Modules do you have installed (asking this question feels a little "WordPress" )?1 point
-
Be sure that we are all aware of that here, it's just that newcomers don't and may take it the wrong way. I'm certain that @theoretic will appreciate your kind apology1 point
-
Learning Git has got to be a good thing (I need to learn more about it myself), but in terms of solving the "two computers for local development" issue in the quickest and simplest way I would have thought this would be the thing to look at: I think you want a single version of the files and DB on the laptop (in case you need to work away from home some time) and then access those on the desktop machine via a local network. Just leave the laptop on when you want to work from the desktop. Or another idea: just carry the laptop downstairs and work exclusively on that machine (I have a large external monitor and external keyboard I plug my laptop into when working at my desk).1 point
-
Dear all, I want to apologize for my harsh comment which was a spontaneous reaction and not well thought-out. I highly appreciate the spirit of this friendly community and didn't want to hurt anybody. Those of you who have read more of my posts know that usually I try to be constructive and not a troll. Best wishes ottogal1 point
-
If you want to get involved I'd suggest you to add your thought to the mentioned PW branding thread. It's basically our most current state of branding and evolving from there would probably be the best.1 point
-
First of all, so the whole post doesn't sound overly harsh and negative: It's great to see that you want to help out and change something, but the way you took might not have been the best one. So now we have four of them. The problem the project does have in terms of corporate identity is not the lack of a good logo (our latest one present in the uikit theme is actually quite nice), but rather that it's hard to get things changed to one consistent look if there isn't one driving force behind that change with all the needed access. E.g. even just the processwire website has naturally grown to consist of about 4-5 destinct parts, which would need to be updated. And there's not only the logo, but the whole site could sport a freshed up look. It would clearly be nice to have those changes be done more quickly, but to be honest it's only Ryan who could lead the whole process to an end and he has a lot more than just this topic on his todo list. There's certainly willingness in the community to help out, but too many cooks spoil the broth and it'll still need Ryan to be involved in the process to at least lead the whole effort.1 point
-
hi @Macrura, glad you like it, but to be honest i don't think any more that this module has a big value now as i've done a lot more modules on my own, i would just put a simple hook into ready.php and hardcode the description. or get the description from a field in a custom settings page or the like...1 point
-
1 point
-
Hi @antpre and everyone. I lack time in recent days but the module should be available to the public the next coming week!1 point
-
Ah man, this is awesome. It'll make it a lot easier to use Processwire as the CMS for a front-end not built on Processwire. =D1 point
-
No there isn't at the moment. There will be support for it of course. The way it will work is if the user has a view access to the image field she will be able to fetch all the available image information, including the thumbnail variations. For user to be able to create thumbnails herself, she will need an edit access for that field.1 point
-
Thank you @Martijn Geerts! Works with both Lister and ListerPro, right? I will purchase my very first ListerPro copy in the near future, so I'm glad you've just shared it1 point
-
Definitely working here. Have you done a Modules > Refresh? Maybe it is caching the source?1 point
-
By any chance, did you add cloudflare or something like that? I ran into this issue recently. The session logs said "Error: Session fingerprint changed (IP address or useragent) (IP: 108.162.219.219)." That IP address is Cloudflare IP. Then, after searching on this forum, I added sessionFingerPrint = false in config.php. The problem then went away. Good. However, the next day I removed that line to test the login/logout issue. Interestingly, I didn't notice any issue. So -- I don't really understand why the problem didn't reappear after I removed that sessionFingerPrint line.1 point
-
$process = $this->wire('process'); if($process && $process->className() == 'ProcessPageEdit') $page = $process->getPage();1 point