Jump to content


Popular Content

Showing content with the highest reputation on 08/29/2018 in all areas

  1. 9 points
    I found (trough smashing magazine) these two cool links with a good overview with all properties about grid and flexbox: http://grid.malven.co http://flexbox.malven.co
  2. 3 points
    Thanks for pointing me to this. I was using the wrong keyword(modal, popup) to search for this feature. This is the thing I am looking for. Let me back-link your tutorial here for people like me.
  3. 3 points
    So, food for thought in terms of REGEX vs DOMDocument: Benefits of using REGEX: Essentially faster/more efficient for processing of the data Doesn't care about valid source structure as it's parsing straight text, not XML nodes Implementation is unlikely to change Detriments of REGEX: Writing a perfect implementation of a REGEX when dealing with HTML to handle all use-cases without experiencing any edge-cases is difficult (might "greedily" match more than intended) It definitely works, but the developer argument is: is it the best (most appropriate) tool for the job? Without a good knowledge of REGEX, harder to understand the underlying code if changes/updates are required Benefits of using DOMDocument: Written specifically for the purposes of this type of task (searching/modifying the DOM) DOMDocument shouldn't ever be "greedy" over what it matches, like REGEX unintentionally tends to do Detriments of DOMDocument: May require valid HTML, but with iterations of HTML, what exactly is considered valid? Would different versions of PHP handle the DOM differently with version differences? Potential of implementation changes. loadHTML() may modify your source - what goes in might not be what comes out Character encodings may cause unforeseen issues (don't they always!) Without a good knowledge of PHP's approach to using DOMDocument, the code process can get rather difficult to understand if changes/updates are required Some further reading from someone else with more thorough testing: https://blog.futtta.be/2014/05/01/php-html-parsing-performance-shootout-regex-vs-dom/ https://blog.futtta.be/2014/04/17/some-html-dom-parsing-gotchas-in-phps-domdocument/ Realistically it's a judgment call. Speed and server efficiency versus (one would hope) better valid modifications/detections. I don't think there's really a right or wrong solution. Some shared hosting servers don't install the DOMDocument PHP extension by default though, so you'd want to check for the existence of the function during your module's install method. P.S. - Thanks for asking the question -- I knew DOMDocument was slower, but haven't compared in awhile. The articles I saw above were an interesting read.
  4. 2 points
    I think the reason is just lack of time on the part of the module devs, but it would also need to be adapted because of breaking changes. I have been thinking of giving another shot at debugging this thoroughly, but have lacked time and energy.
  5. 2 points
    A bit OT, but worth a read: https://dev.to/effingkay/4-practices-for-better-code-4nf3
  6. 2 points
    I'm afraid I don't understand the whole scenario/setup. It would help if you'd explain a bit more in detail what these DB fields actually contain and how they relate to PW-content. I'm sure we'll find a way to solve this, but right now, the issue (for me) is a bit foggy... Oh, and btw, welcome to the forum
  7. 2 points
    Ah, known problem with PFE and jQuery. https://processwire.com/talk/topic/19862-front-end-editor-conflict-with-bootstrap-4/
  8. 2 points
    Thank you! Happy to hear that and glad I could give something back to you, Reno - thanks for all your great contributions
  9. 2 points
  10. 2 points
  11. 1 point
    Thanks for the feedback, horst. Apologies. I'll try to bear that in mind in future.
  12. 1 point
    $session is only usable from within PW. Use PHP's native $_SESSION instead.
  13. 1 point
    Well, it's definitely a problem with jquery 3.3.1. I replaced it with version 2.2.4 via CND and now everything looks good. I use Zurb Foundation, but since the error still occurs even after removing all styles and scripts except for jquery, it can't be related to Foundation, right? Thank you all for helping!
  14. 1 point
    The $dateFrom and $dateTo arguments aren't working with some date strings that are valid for strtotime(). // Not working $events = $recurme->find('01-08-2018', '31-08-2018'); // Also not working $events = $recurme->find('08/01/2018', '08/31/2018'); These are being converted by Recurme to the timestamp for "January 1 1970".
  15. 1 point
    Hi! Wanted to share this and ask for opinions: I see a lot of regex approach to finding/changing links but the DOMDocument class seems very useful, is there a downside to this? Any other comment to improve this? (naming convention, code style?) <?php /** * Textformatter to output local links inside RTA textarea fields, as their language equivalents * by Eduardo San Miguel * * ProcessWire 2.x * Copyright (C) 2011 by Ryan Cramer * Licensed under GNU/GPL v2, see LICENSE.TXT * * http://www.processwire.com * http://www.ryancramer.com * */ class TextformatterLanguageLinks extends Textformatter implements Module { public static function getModuleInfo() { return array( 'title' => "Multilanguage links", 'version' => "100", 'summary' => "Textformatter to output local links inside RTA textarea fields, as their language equivalents", 'author' => "Eduardo San Miguel", 'requires' => array( "PHP>=5.4.0", "ProcessWire>=2.5.28" ), 'icon' => 'languages' ); } public function format(&$str) { $dom = new DOMDocument(); $dom->loadHTML($str); $tags = $dom->getElementsByTagName('a'); foreach ($tags as $tag) { $path = wire("sanitizer")->path($tag->getAttribute("href")); if($path){ $possiblePage = wire('pages')->get($path); } else{ continue; } if($possiblePage->id){ $langPageUrl = $possiblePage->localUrl(wire("user")->language); } //If empty? if($langPageUrl){ $str = str_replace($tag->getAttribute('href'), $langPageUrl, $str); } } } } Edit: Already found bugs because I wasn't sanitising the assumed path in the href attributes.
  16. 1 point
    Wow! Amazing educational answer, thanks a lot, this kind of conversation really helps anyone move forward, thanks for your dedication!
  17. 1 point
    @bernhard Thanks!!! I should have written before... Anyway, I can continue my exploration!
  18. 1 point
    Presentation Originaly developped by Jeff Starr, Blackhole is a security plugin which trap bad bots, crawlers and spiders in a virtual black hole. Once the bots (or any virtual user!) visit the black hole page, they are blocked and denied access for your entire site. This helps to keep nonsense spammers, scrapers, scanners, and other malicious hacking tools away from your site, so you can save precious server resources and bandwith for your good visitors. How It Works You add a rule to your robots.txt that instructs bots to stay away. Good bots will obey the rule, but bad bots will ignore it and follow the link... right into the black hole trap. Once trapped, bad bots are blocked and denied access to your entire site. The main benefits of Blackhole include: Bots have one chance to obey your site’s robots.txt rules. Failure to comply results in immediate banishment. Features Disable Blackhole for logged in users Optionally redirect all logged-in users Send alert email message Customize email message Choose a custom warning message for bad bots Show a WHOIS Lookup informations Choose a custom blocked message for bad bots Choose a custom HTTP Status Code for blocked bots Choose which bots are whitelisted or not Instructions Install the module Create a new page and assign to this page the template "blackhole" Create a new template file "blackhole.php" and call the module $modules->get('Blackhole')->blackhole(); Add the rule to your robot.txt Call the module from your home.php template $modules->get('Blackhole')->blackhole(); Bye bye bad bots! Downloads https://github.com/flydev-fr/Blackhole http://modules.processwire.com/modules/blackhole/ Screen Enjoy
  19. 1 point
    PW already has VEX onboard. You can easily use it like I did in RockGrid. See this example: You'd just need to target the right save-button and save only when the user confirms.
  20. 1 point
    Well, in the meantime, as a quick and dirty workaround, you could just insert an old-fashioned dialog in modules/ProcessPageListerPro/ProcessPageListerPro.js / line 29 $("#Inputfield_run_action").click(function() { var $form = $(this).parents('form'); $form.attr('target', 'actions_viewport'); // change target for this submission $viewport.slideDown(); if($viewport.is(".InputfieldStateCollapsed")) $viewport.find(".InputfieldHeader").click(); setTimeout(function() { $form.attr('target', '_top'); }, 1000); // restore target var $icon = $(this).find("i.fa"); $icon.attr('id', 'actions_spinner').attr('data-icon', $icon.attr('class')).removeClass($icon.attr('class')).addClass("fa fa-lg fa-spinner fa-spin"); if (window.confirm("Do you really want to do this?")) { } return true; });
  21. 1 point
    I've stumbled into this as well in the past. Most users I've shown the Actions don't really get the current concept. They either forget they are performing actions on all or they forget to filter at all. Ryan came up with some solutions. Personnaly I would like an gmail approach so make sure the user is as notified as possible of what is going to happen. The current UX doesn't really cut it. A modal could work too.
  22. 1 point
    Just tried out 2-factor auth for the first time - works like a charm! (both with email and with Google Authenticator).
  23. 1 point
    bernhard, I've been working on a project with mPDF and there are lots of variants to the PDF content and how they are saved/downloaded, etc... It got me thinking about making a PW helper module to make things a little more sane to deal with. I decided to see how others were dealing with PDF creation within ProcessWire, and whaddya know — what I was imagining already exists. Just wanted to say thank you!
  24. 1 point
    This is already possible since PW 3.0.87: https://processwire.com/blog/posts/pw-3.0.87/#new-field-template-context-settings
  25. 1 point
    Try to find the culprit in the inspector: Is a CSS-rule overriding another one? Which CSS causes this? If you see inline-styles: a) look at the rendered source via inspector (CTRL + SHIFT + C) b) compare it to the raw HTML source-code, as it is being delivered by the server, i.e. before any JS had a chance to manipulate the DOM (before any window.load or document.ready has been applied). In Chrome, the keyboard shortcut is CTRL + U. If you don't see any inline-styles in b), it means some JS is triggered to alter the iFrame styles (or something near there). CTRL + SHIFT + J And of course, check the console for JS errors or warnings.
  26. 1 point
    I tried with <edit fields="table">test table field</edit> and can't replicate. maybe you should try with the latest PW version?
  27. 1 point
    Thx @Mackski I've done a slightly different approach: You now have the option between three methods: save() show() download() The save() method will return the resulting file urls and paths on success: @flydev thx I've added it to the modules directory
  28. 1 point
    As written on the page I linked in my first post: Just drop @ryan a short message and he will help you.
  29. 1 point
    My personal preference is not to update the .htaccess file automatic. If something breaks, the complete site may become unrenderable. Also warning mechanism may not get invoked then(!). Additionally I only allow read access to the file for security reasons. So my favourite would be to collect candidates and provide them as alphabetically sorted markup on demand
  30. 1 point
    I am using the module on various multilingual sites and it's working fine! When you have Jumplinks installed it sometimes hits an 404 on /sitemap.xml even though the link/sitemap is working. Do you have to create an extra page and template (xml header) for it?
  31. 1 point
    Hello. I'd like to include a link in my field description. See attached, highlighted in yellow, so we're all clear on what a field description is. I'd be nice to offer a link to a Markdown guide (in this case). Is this possible to use HTML to create a link in the description. I'm not looking for any hacky ways here. I was hoping it was something I could just do or option that I could tick. Thanks.
  32. 1 point
    Hi @Chris Falkenstein You can use markdown or textile syntax in description of fields
  33. 1 point
    Again it boils down to differences in use cases. I don't think any of our sites have a single page with even close to a hundred images, let alone that amount of variations. I would assume that this requires some tricks either way; from my point of view variations are temporary data, so one should always be prepared for them going away, and generating hundreds of variation images at one go sounds like an extremely resource-intensive task. If I had this kind of need, I'd probably try to figure out some method of creating the variations as a background task before the page (or images without variations) can become publicly viewable Anyway, I'm not saying that this isn't a feasible situation, just that it's something none of our sites have. For us it's common to have hundreds or thousands of pages with a few images at tops, in which case a method of cleaning out all variations would be quite handy. On the other hand for use cases like the one you've mentioned above a page-by-page solution would make more sense. Perhaps two separate solutions would make most sense? Not sure if clearing unused variations is really feasible, considering how they're requested, but of course that would be nice if it was feasible..
  34. 1 point
    Just use httpUrl instead of url.
  35. 1 point
    Upcoming update: Blog version 2.2.1. (dev) Summary of Changes: All main methods that render HTML output are now configurable via a parameter/argument $options These changes allow much greater control of your Blog features' layout/output. I will provide examples later but most of the below is hopefully self-explanatory. Please note these changes supersede those introduced in version 2.1.1 and 2.1.0 (some name changes to array indices + some additions). None of the changes will break your existing install if you are using the stable Blog branch. However, if you updated to 2.1.1 on the dev branch, AND started using some of its new optional features, some minor modifications to template files could be required (i.e, following the examples shown in 2.1.0, e.g. for renderPosts(), $featuredImage parameter is now $options and covers all aspects of rendered posts, not just featured images. E.g. to display a featured image on a summarised post, use array('post_small_image'=>xxx) as shown below. I have updated the dev branch for testing/comments, thanks. I will update the docs once I merge to master branch. New Default Options in MarkupBlog Methods renderPosts() //default options for various aspects of posts $defaultOptions = array( 'post_count' => 1,//0=off, 1=on - for the count in: Posts 1 to 5 of 15 'post_count_text' =>$this->_('Post'),//e.g. Posts 1 to 5 of 15 'post_not_found' => $this->_('No posts found.'),//message when no posts found 'post_author' => 1,//display name of post author: 0=off,1=top(below post-headline),2=bottom(in post-foot) 'post_author_text' => $this->_('Posted by'),// 'post_date' => 1,//display post's date: 0=off,1=top(below post-headline),2=bottom(in post-foot) 'post_date_text' => '',//e.g. Posted by author 'on' date 'post_more_text' => $this->_('View More'),//for $small posts - link text to full post 'post_categories' => 2,//display post's categories: 0=off,1=top(below post-byline),2=bottom(in post-foot) 'post_categories_text' => $this->_('Categories:'),//e.g. 'Categories', 'In', 'Filed under', etc 'post_tags' => 2,//display post's tags: 0=off,1=top(below post-byline),2=bottom(in post-foot) 'post_tags_text' => $this->_('Tags:'),//e.g. 'Tagged', 'Related', etc 'post_small_allowable_tags' => '',//holds string of HTML tags for strip_tags $allowable_tags. Needs to be in format '<code><p><img>' 'post_small_headline_tag' => 'h4', 'post_large_headline_tag' => 'h2', 'post_comments' => 1,//show comments info? 0=off,1=comments count top,2=comments count bottom,3=comments count top & bottom 'post_zero_comments_text' => $this->_('No comments yet'), 'post_comments_text' => $this->_('Comment,Comments'),//title in anchor comments icon + post-foot comments text, e.g. '2 Comments' or '1 Comment'. Must be in 'singular,plural' format 'post_comments_label' => $this->_('Comments:'),//this appears in post-foot, e.g. 'Comments': 2 Comments //## featured images ## 'post_image_alt' => 'description',//defaults to $image->description. Otherwise other stated field on the page, e.g. = 'title' 'post_image_tag' => 'featured',//string: image tag to look for in blog_images//@@todo - need translation here? //** small/truncated post featured image ** 'post_small_image' => 0,//display post's featured image: 0=off,1=top(above post-headline),2=bottom(first item in post-body) 'post_small_image_width' => '',//no width manipulation of featured image if this is blank or 0 'post_small_image_height' => '',//no height manipulation if this is blank or 0. Note, if size is true and both width and height > 0, use size() instead /*size: - image will be resized to exact dimensions -> $img = $image->size($x, $y) - where $x = 'width' and $y = 'height'*/ 'post_small_image_size' => false,//if 'size' = true AND both width and height > 0, this kicks in //** large/full post featured image NOTE: for full posts, to avoid duplication we only pull image from blog_images ** 'post_large_image' => 0,//display post's featured image: 0=off,1=top(above post-headline),2=bottom(first item in post-body) 'post_large_image_width' => '',//no width manipulation of featured image if this is blank or 0 'post_large_image_height' => '',//no height manipulation if this is blank or 0. Note, if size is true and both width and height > 0, use size() instead 'post_large_image_size' => false,//if 'size' = true AND both width and height > 0, this kicks in ); renderTags() //default options for tags $defaultOptions = array( 'tags_posts_text' =>$this->_('post,posts'),//come in the format 'singular,plural' for e.g. 1 'post' ); renderCategories() //default options for categories $defaultOptions = array( 'categories_posts_text' =>$this->_('post,posts'),//come in the format 'singular,plural' for e.g. October 5 'posts' 'categories_not_found' => $this->_('No categories to display.'),//message when no posts found 'categories_more_text' => $this->_('View More'),//link text to view all posts in that category ); postAuthor() //default options for author widget $defaultOptions = array( 'author_text' => $this->_('Author'),//text next to author title|name 'author_thumb_width' => 100,//no width manipulation of author thumb if this is blank or 0 'author_thumb_height' => '',//no height manipulation of author thumb if this is blank or 0 'author_thumb_alt' => 'title',//defaults to $author->title. Otherwise other stated field on the page, e.g. = 'title' or if 'description' then $image->description ); renderNextPrevPosts() //default options for next/prev posts $defaultOptions = array( 'prev_post' => '<',//tag/text for previous post, e.g. «, «, etc, i.e. << >>, etc 'next_post' => '>',//tag/text for next post, e.g. ›, etc 'prev_post_text' => 'title',//if title or not empty: will show title of the prev post. Otherwise show specificed text, e.g. 'Older entries' 'next_post_text' => 'title',//if title or not empty: will show title of the next post. Otherwise show specificed text, e.g. 'Newer entries' ); renderComments() - was already configurable; here showing new additions only //ADDITIONAL default options for comments $defaultOptions = array( 'comments_success' => $this->_('Thank you, your submission has been saved.'), 'comments_error' => $this->_('Your submission was not saved due to one or more errors. Try again.'), 'comments_text' => $this->_('Comment,Comments'),//comments text, e.g. 2 'Comments' or 1 'Comment' next to comments count (div#comments). Must be in 'singular,plural' format 'comments_list_empty' => $this->_('No comments found.'), 'comments_list_reply_text' => $this->_('replied to'), 'comments_by_text' => $this->_('Comment by'), 'comments_post_text' => $this->_('Post a comment'), 'comments_prev_text' => $this->_('Back'), 'comments_next_text' => $this->_('Next'), ); renderArchives() //default options for archives $defaultOptions = array( 'archives_posts_text' =>$this->_('post,posts'),//come in the format 'singular,plural' for e.g. October 5 'posts' 'archives_month_view_all_text' => $this->_('View All'),//'view all' that month's archives if limit set on amount to list );
  • Create New...