Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 12/08/2020 in all areas

  1. This is really nice to know! I actually have a ServerPilot account from when they had their free tier, quite a few years ago and it's still running my first pet project with ProcessWire, getting 100k-200k sessions a month on a 5USD Vultr VPS.
    4 points
  2. Two options: No template file for the template the children pages use (direct access to a child URL will lead to a 404). Make the children unpublished (accessing children will result in a 404 unless you are logged in and have view rights to those children). In this case, selector should have include=unpublished.
    2 points
  3. Hard to give a comparison because I've not used the other services but we switched to Cloudways about 18 months ago and they've worked well for us ( much faster than the previous hosting company we used). You get to pick server providers with no need to separate accounts with them so all the billing is in the same place. The control panel does pretty much everything we need to and you can let clients have access to their server if you trust them. We've not had to contact support for anything serious but when we have spoken to them they were responsive and seem to know what they're doing. I suspect most of my Christmas holiday is going to be spent shifting sites from our old provider over to them...
    2 points
  4. If one day you want to play with dedicated server, you can try to get one from kimsufi, they start at less than 5€ ? but you need to stay a long night refreshing the browser or code a bot to get the server, there are hard concurrence on this at this price. The last thing I made for example it's a server to host a live support chat service (https://github.com/LiveHelperChat) ?
    2 points
  5. ServerPilot is a cool service and deserve a word here. I know this service because of @Macrura and I never get out. Thanks dude ! You buy a dedicated server, attach it to ServerPilot and you get your server up in minutes, he will get updated without any intervention. You will get the right stuff, updated with every last software and dependencies version, patched, without "any" security hole. I even some at the start tried to hack the server with no luck, I had to make a vulnerability myself to get into ? no really you get all needed architecture, like app isolation and more with security in mind. And if you know what your are doing, you can install any software you want, do any ninja command or add any config through SSH. You will also like their support lol, full of experienced geeks veterans. That's all, this was my 10$ spam for today ?
    2 points
  6. Admin Theme Canvas A minimal admin theme with optimised page editor UI, based on Uikit 3. Currently this is close to stable, but users are advised to be cautious and test thoroughly. This theme is tested in all major Browsers including IE 11, Edge (>85), Chrome (>85), Firefox (>81), Safari (>11). If you find any bugs or have ideas for improvements, feel free to post your feedback. Download from Github Download from Modules Page Features Minimal black and white admin theme Fixed masthead navigation Direct access to page tree navigation inside page dropdown Less distraction for editors (when editing a page, the tabs are displayed as a dropdown menu inside the main navigation) Options to customise the ui Less distraction for editors Direct access to page tree navigation inside dropdown Page tree Options to customise the ui Login (inspired by AdminThemeBoss) Requirements Process Wire 3.0.100 or greater Installation Go to “Modules > Site > Add New“ Paste the Module Class Name “AdminThemeCanvas“ into the field “Add Module From Directory“ Click “Download And Install“ On the overview, click “Download And Install“ again… On the following screen, click “Install Now“ Go to your user profile page and change the theme to Admin Theme Canvas
    1 point
  7. Hi everyone, I'm happy to present my latest project, which is a collection of guides and tutorials for web development with ProcessWire written by me. https://processwire.dev/ What is this? I have written several tutorials in this forum, and I wanted a central place to collect all my tutorials and put them in a logical order. processwire.dev is exactly that, a curated list of tutorials for different topics related to ProcessWire development. I have revised, updated and expanded most of my existing tutorials. There are also some completely new tutorials. Notable topics How to integrate Composer in your ProcessWire sites, and a general explainer for namespaces and autoloading. A two-part guide to using Twig with ProcessWire and adding custom functionality. How to create flexible content modules with Repeater Matrix fields and Twig. A general guide to performance optimization for ProcessWire. A starter guide for the "ProcessWire mindset" - how to structure your content. ... and much more! What's next? I hope this will be a useful resource to all of you fine people. Please note that these tutorials are very much opinionated, and they reflect my personal experience and development practices. So if you disagree with some of my conclusions, that's perfectly fine! I'm happy to discuss all my recommendations and approaches with you, so let me know if you have any feedback, suggestions or error corrections! I plan to expand this resource over time and already have some new topics planned. If you have suggestions for new topics, go ahead and post them here as well! Start reading now: processwire.dev
    1 point
  8. Hi everyone! This services have popped around in conversations around the forum and wanted to give it its own topic to share some experiences with these services. I have personally used Runcloud and I am happy with it, specially with their support which is most of the time really fast. But feature wise Ploi seems to be really far ahead features wise and I really wish for a lot of their stuff like load balancer, the backup system, db servers, etc.
    1 point
  9. Pushed the fix that removed the bd() call. Thank you for the reminder. I put some work in over the weekend on the permission feature. The new permission is named "fluency-translate" in case you want to rename yours to match the later releases. This release also formally adds the 5th Fluency->translate() argument to feed in additional API parameters. Everything is always a time crunch between holidays here, looking forward to when I can get back to working on more changes. Permission will be the next feature. Excellent to hear that it's in production! We've been using it and it's been smooth sailing.
    1 point
  10. Personally I don't use it that often, but when the need arises, it's actually a really nice timesaver, so I wouldn't want to be without it.
    1 point
  11. 1 point
  12. that would be a good solution. maybe @adrian can implement this in tracy someday ? done ?
    1 point
  13. @flydev ?? I just pushed an update. Can you try the latest version (0.12) and see if it fixes the issue?
    1 point
  14. /** this fix seem to fix everyting **/ .InputfieldContent .pw-table-responsive { margin: 0 0 10px; } @jploch @adrian About the Save button on the bottom right, if could TracyDebugger set a class on the body - 'has-tracy-on' - we could override the save button position only if TracyDebugger is present.
    1 point
  15. Now that I think about it more, it seems that a redirect would suffice as well? I don't know zilch about redirects and SEO if that is not a problem then all we need is for the hook to redirect to the same page in the current language under certain conditions. So, thinking out loud here: We can limit the hook to certain frontend templates, a parent, etc. If condition #1 is met, we check if the current user language is not the default language. If it is, we abort. If condition #2 is met, we check if the requested page is viewable in the current user language. If yes, we redirect to its URL. If not, we do nothing. Having said that, I cannot off the top of my head remember where to hook. Maybe before some page render. I'll have a look, unless somebody else beats me to it ?.
    1 point
  16. @flydev ?? you are right, I also noticed this. You can temporarily close tracy with the small arrow to make the save button visible again, but it's inconvinient. I might make the position of the save button configurable via the module settings. Since I also removed some of the save options (like save and next) for a simpler UI, this could also be an option. Not sure how others feel about the old save dropdown functionality, but I always felt it was to complicated and I never used it.
    1 point
  17. At my dayjob I am dealing with Microsoft Server nonprofit licensing right now and it makes me appreciate Linux even more! ? I'm also having good results running Ubuntu in Windows Subsystem for Linux.
    1 point
  18. Sounds like a plan! I'd start asking if you have enough understanding on how "routing" in processwire works as well as template/fields concept and how they relate to pages. With that said, I'll try to quickly illustrate an example: This is definitely a way you can add content using the API. Let's assume you have a template named "new-product", and a page "New Product" with said template under Home page. You end up with a page tree like this: Home -- New product -- Products --- Product 1 --- Product 2 This page doesn't need to have fields, it's just a place (a route) to handle code with /site/templates/new-product.php template file, which is automagically assigned to every page with the template "new-product". Here is some sample code that would live on that template. if($input->post->submit){ //Do stuff like sanitizing and validation, very important // Some basic page creation saving would look like this $newPage = new Page(); $page->template = "product"; $page->parent = $pages->get('template=products'); $page->title = $sanitizedTitle // This comes from the imaginary code above $page->save(); } else{ //Do the form rendering however you want. } This way user arrive to /new-product/, submits a form, and you handle the page creation right there. As you can see, products get a parent page, which is the page called Products, where I'm also assuming it has a template named "products", it is another tempalte without any required fields in the current context, it just handles the organization of the products. You would end with each product under: /products/product-1 /products/product-2 Last but not least, FormBuilder pro module handles the form-to-page process basically out of the box.
    1 point
  19. This is an interesting problem ?. I don't think it is possible out-of-the-box since having a language active does not prevent access to other languages. Hence, ProcessWire 'respects' the requested URL, as long as it is viewable. Off the top of my head I cannot remember if there is a module out there that solves this problem, but have a look, just in case, especially for modules by Robin S. Otherwise, you'll need a hook or a textformatter module that changes the links on the fly.
    1 point
  20. Super theme ? A simple tips. If you are using - the must have module - BreadcrumbDropdowns from @Robin S, it will work with this theme once you put this config line in the module config : AdminThemeCanvas::renderBreadcrumbs ?
    1 point
  21. @jploch - this really does look very nice - much cleaner and more professional. I really appreciate the hard work that's gone into it and I would love to use it, but unfortunately for me it always comes back to the fact that themes in PW tend to end up out of date when Ryan applies fixes and new features so I find it's just not worth the risk. Am I the only one that feels this way?
    1 point
  22. I found a solution. At least the solution still works after some testing: Logging in, typing tfa, logging out, closing browser. The solution was to hook the redirect after ProcessLogin::afterLogin. $this->addHookAfter('ProcessLogin::afterLogin', null, function($event) { if($this->wire('user')) $this->wire('session')->redirect("/"); });
    1 point
  23. Hi there, another one finished, up and running. https://bots4you.de/ The website informs about bots4you which is a German based Chatbot creator. Special with this chatbot is its b2b purpose, that means it is pretty decent in "knowing" what customers of several industries (real estate, insurances etc.) want to know and describe their efficiency with nearly 80% of success for common customer inquiries. From the ProcessWire perspective I mainly use Repeater Matrix with which I only have one template (even for home) but 8 content modules that can be arranged like the customer wants to create different pages. Other than that I used TailwindCSS for the first time, but I am not convinced, at least in a PW environment. Downsides where: build time when in dev mode (hot reload takes up to 6 seconds) purge of my php files was less than reliable. I ended up putting most of the classes on an allow list in the tailwind config. Could be my fault, but the overall experience wasn't that great. Anyway, client is happy, and I am, too: ?
    1 point
  24. There is no hookable method especially for images inserted in a CKEditor field. But two options: 1. Use/code a textformatter module to manipulate the image tags within a field. This approach has the advantage that you don't have to mess around with your field settings to make sure the classes and attributes you want to add are allowed by ACF and HTML Purifier. There is even an existing textformatter module you can use: https://modules.processwire.com/modules/textformatter-srcset/ 2. Hook the saving of pages (e.g. Pages::saveReady) and modify the markup in your CKEditor field before it is saved. The approach would be similar to the textformatter option - you parse the markup to identify the image tags (using regex or a DOM parser such as DOM) and use the src attribute to get the relevant Pageimage to create your different sizes from. The difference is that this parsing/modification is done whenever the page is saved rather whenever the field value is loaded. Option 2 is more efficient, but I would tend to go for option 1 because it's not destructive and gives greater flexibility to make changes down the line. And maybe that existing textformatter module is just what you need.
    1 point
  25. Does this work? $p = $this->storagePage; $p->of(false); $p->pdfStorage_files->add($path); $p->save('pdfStorage_files'); return $p->pdfStorage_files; Not sure if your problem is the missing $p->of(false) or trying to save the $files pagefile object instead of the "pdfStorage_files" field name. PS - what @Robin S said
    1 point
  26. Custom Page List lets you easily customize the page list (tree) in the admin section. I wanted something more (easily) configurable than the existing solutions, so I tried to add some new functionality with an easy to use interface. This is my first module for ProcessWire, so don't hesitate to let me know how to make it better Based on the work of Philipp Urlich (somatonic): PageListImageLabel https://github.com/somatonic/PageListImageLabel Adam Spruijt (adamspruijt): PageListBetterLabels https://github.com/adamspruijt/PageListBetterLabels Features Customize styles and separators used in the page list Display custom labels for each field Display image thumbnails Display formatted dates Display info from related models (e.g. title field of related pages) Display on/off checkbox as "Yes/No" (ready for translation) Define output filter(s) for each field Configuration See the README that comes with the download. Download Source code is available at https://github.com/hgassen/custom-page-list.
    1 point
  27. Thanks for this module. Works great so far. The only issue I have is, that the thumbnail generation doesn't work when using a single image field. I quickly edited you module like this to fix single image fields: // interrobang: additional check: $v instanceof Pageimage if ($v instanceof Pageimages || $v instanceof Pageimage && $thumbExists === false) { // Get image sizes if (strpos($options['pageLabelImageSize'], ',') !== false) { $size = explode(',', $options['pageLabelImageSize']); $sizeWidth = $size[0]; $sizeHeight = $size[1]; } else { $sizeWidth = $options['pageLabelImageSize']; $sizeHeight = $options['pageLabelImageSize']; } if (!is_numeric($sizeWidth) || !is_numeric($sizeHeight)) { $sizeWidth = $sizeHeight = 24; } if (count($v)) { // If image field is of type cropimage (thumbnails module) if ($this->fields->get($field)->type == 'FieldtypeCropImage' && $subfield) { $thumbUrl = $v->first()->getThumb($subfield); $thumbUrl = $v->url . $this->resizeThumb($v, $thumbUrl, array($sizeWidth, $sizeHeight)); // interrobang: additional elseifs for Pageimages and Pageimage // Normal image fields } elseif ($v instanceof Pageimages) { $thumbUrl = $page->$field->first()->size($sizeWidth, $sizeHeight)->url; } elseif ($v instanceof Pageimage) { $thumbUrl = $page->$field->size($sizeWidth, $sizeHeight)->url; } }
    1 point
×
×
  • Create New...