Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 02/06/2019 in all areas

  1. A module helping you to manage SEO related tasks like a boss! Automatically generates and maintains a XML sitemap from your pages. Includes a Fieldtype and Inputfield to manage sitemap settings and meta data for pages (Title, Description, Canonical URL, Opengraph, Twitter, Structured Data etc.) Multi language support for the sitemap and meta data. Configure default values for meta data on template level and let pages inherit or overwrite them individually. Map existing fields to meta data, reducing the need to duplicate content. Live preview for content editors how the entered meta data appears on Google. Live preview for content editors how the entered Opengraph data looks like when sharing a page with Facebook. Check out the README on GitHub for more details, including usage instructions. The module is currently released as beta and needs testing! Please report any issues on GitHub or in this forum thread, if you find time to give it a try ๐Ÿ™‚ Examples Here is an example of rendered meta data you will get from a single SeoMaestro field: <title>Sed dictum eros quis massa semper rutrum. | acme.com</title> <meta name="description" content="Si lobortis singularis genitus ibidem saluto. Dolore ad nunc, mos accumsan paratus duis suscipit luptatum facilisis macto uxor iaceo quadrum. Demoveo, appellatio elit neque ad commodo ea. Wisi, iaceo, tincidunt at commoveo rusticus et, ludus."> <meta name="keywords" content="Foo,Bar"> <link rel="canonical" href="https://acme.com/en/about/"> <meta property="og:title" content="Sed dictum eros quis massa semper rutrum."> <meta property="og:description" content="Si lobortis singularis genitus ibidem saluto. Dolore ad nunc, mos accumsan paratus duis suscipit luptatum facilisis macto uxor iaceo quadrum. Demoveo, appellatio elit neque ad commodo ea. Wisi, iaceo, tincidunt at commoveo rusticus et, ludus."> <meta property="og:image" content="https://acme.com/site/assets/files/1001/og-image.jpg"> <meta property="og:image:type" content="image/jpg"> <meta property="og:image:width" content="1600"> <meta property="og:image:height" content="1200"> <meta property="og:image:alt" content="Lorem Ipsum"> <meta property="og:type" content="website"> <meta property="og:url" content="https://acme.com/en/about/"> <meta property="og:locale" content="en_EN"> <meta name="twitter:card" content="summary"> <meta name="twitter:creator" content="@schtifu"> <meta name="twitter:site" content="@schtifu"> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "About", "item": "https://acme.com/en/about/" } ] } </script> <meta name="generator" content="ProcessWire"> <link rel="alternate" href="https://acme.com/en/about/" hreflang="en"> <link rel="alternate" href="https://acme.com/en/about/" hreflang="x-default"> <link rel="alternate" href="https://acme.com/de/ueber/" hreflang="de"> <link rel="alternate" href="https://acme.com/fi/tietoja/" hreflang="fi"> And some screenshots of the UI:
    16 points
  2. I would: Download the files and the database Run the site locally Reset the admin user Upgrade the site to PW 3+ Work on it
    3 points
  3. Fear not! Reset it: https://processwire-recipes.com/recipes/resetting-admin-password-via-api/
    3 points
  4. https://processwire.com/api/ref/sanitizer/match/
    3 points
  5. If for any reason, you can't get terminal access, you can add the php code to any template that already exists in the /site/templates directory and then view any page based on the template to trigger it. You won't require the first require line in that case, and don't forget to remove the password reset code again afterwards.
    2 points
  6. As you may not know the user name, create a file called "change_pass.php" on /site/templates. Put this on it: <?php namespace ProcessWire; require "./index.php"; $admin = $users->get(41); $admin->setAndSave('name', 'youNewUserName'); $admin->setAndSave('pass', 'yo123456'); Now, using a terminal, go the project directory and run the php file: cd myproject/ cd site/templates php change_pass.php Et voilร 
    2 points
  7. I have a new favorite font: Inter Best of all, it's open-source ๐Ÿ™‚
    2 points
  8. Not now but soon. We are developing around our ElasticSearch Instance a GraphQL Service and will than show Content from our Blog etc. in other heavy traffic section on https://www.blue-tomato.com When it is live I will post it here
    2 points
  9. Hope it's nothing too serious and you're on the mend.
    2 points
  10. Hello All, I've been working on a new Fieldtype + Inputfield combination that handles street addresses. I've been using it now for about 3 months on my latest administration system for a charity and, so far, it seems to be working really well for them. It's based on the meta-data from Google's LibAddressInput project and uses the data feeds from that to build a cache of address formats used by various countries. My initial testing was aided by @Macrura and @adrian - and they were later joined by @mel47 and @BFD Calendar - so a big thank-you to them all. You can access the repository on GitHub and the Module Repository. Here's a few images from the project. First up: config screen. Here's an early version... ...and a more recent update... Here's a UK-based address. The module can integrate with my tag parser, if installed. Note that the output is formatted according to the output meta-data from the feed - which should match the preferred postal preferences of the destination country. Which subfields are required, and their regex expressions (if any) are also pulled from the feed and used as validation rules on the input side. Here's an address in the Netherlands - inputfield layout is currently adjusted on save - if you've configured it to adjust based on the destination country. Hopefully this will eventually be ajax driven. Use of the address preview is configurable and the HTML output can include micro-format data. Address sub-fields can also be used in selectors... Back with inputs, if you prefer a table-based input - you can have it... Format hints (unfortunately, I've found that many users need these)... Let me know if you find any issues or if you have any feature requests. So far, I have this from the previous testers... Allow multi-lingual address input for countries that support a multi-lingual postal system (like Canada.)
    1 point
  11. Hey guys, I haven't come across this before. I'm in a rush but didn't want to forget to ask / report this which seems weird to me. If you check the following via the http it returns the correct url $config->urls->httpRoot but if you do it via CLI then it returns the first entry in your $config->httpHosts array and gives http, rather than https. In my case I had the "dev" subdomain listed first which meant I was always getting http://dev.mydomain.com instead of https://mydomain.com Not sure if this is a bug or not, but definitely something to be aware of if you are using a service from a cronjob and you are using this to send a url for a webhook return or something along those lines.
    1 point
  12. Version 0.3.0 should fix problems on single language installations. ๐Ÿ˜… I will update Travis CI to run the test suite on two installation profiles (single and multi language). This is possible, just wrap the Seo Maestro field in an InputFieldsetOpen.
    1 point
  13. If I understand correctly, something like this should work, let us know if you need more detail: wire()->addHookekAfter("Pages:saved", function($e){ $page = $e->arguments(0); if($page->template == "one"){ $pageTwo = $page->child("template=two"); if(!$pageTwo->id){ //create child page code and save! } } });
    1 point
  14. Beat me to it. It's one of the nice things about Processwire that the admin is simply a UI on top of the API, and anything you can do via admin, you can also do easily via a script.
    1 point
  15. Yes: https://guidetodrawing.com/admin/ Hello and welcome to the forums! Once you access it, take a look on the page structure, see the templates and fields used and after that, the php files inside templates/.
    1 point
  16. One can find even more similar ones ๐Ÿ˜‰
    1 point
  17. Techniques to use in order to cut down on new field creation: Free: https://processwire.com/blog/posts/making-efficient-use-of-fields-in-processwire/ https://processwire.com/blog/posts/processwire-3.0.73-and-new-fieldset-types/ https://processwire.com/blog/posts/pw-3.0.87/#new-field-template-context-settings https://processwire.com/blog/posts/processwire-3.0.14-updates-file-compiler-fields-and-more/#best-practices-with-fields-and-values https://processwire.com/blog/posts/pw-3.0.106/#a-new-way-to-search-with-upgraded-tags-for-fields Paid but this money supports the project ๐Ÿ™‚ https://processwire.com/store/pro-fields/ https://processwire.com/blog/posts/functional-fields/
    1 point
  18. Just noticed that the module does not work correctly on single language installations, as I always tested on multi language setups. Should be easy to fix though, I know what the problem is ๐Ÿ˜„ Cannot fix it today, so if you are testing, you might want to test with multiple languages. Sorry for this, I obviously should have tested this myself. Cheers!
    1 point
  19. 1 point
  20. This module looks AWESOME, @Wanze !! Thank you, thank you, thank you! I'll test it on a new project ASAP to give feedback.
    1 point
  21. Thanks for creating this module.
    1 point
  22. Fields are tied to templates, not pages. You can re-use fields easily: Just clone a field and overwrite settings from within the template. It's also a good idea to tag fields and templates to have a better overview in the backend GUI. https://processwire.com/docs/fields/ https://processwire.com/docs/start/structure/
    1 point
  23. Oh, I see. Thank you very much, sir.
    1 point
  24. Is working like a charm ๐Ÿ™‚ Thank you!
    1 point
  25. I found a solution. I added following to my php.ini: redis.session.locking_enabled = 1 redis.session.lock_expire = 60 redis.session.lock_retries = -1
    1 point
  26. Hey Peter - you can customize in the settings exactly how you want - site wide, template wide and even by page IIRC. However, you might want to check out: https://github.com/wanze/SeoMaestro @Wanze looks to have done a beautiful job on this. @GhostRider - you might also want to check that new module out.
    1 point
  27. @gebeer Could you try replacing getMatchQuery(...) in FieldtypeStreeAddress.module with the following and let me know if it fixes things for you... public function getMatchQuery($query, $table, $subfield, $operator, $value) { $subfields = StreetAddress::getAddressFieldNames(); if ($subfield == 'country_iso') { $subfield = 'data'; } else if (in_array($subfield, $subfields)) { $subfield = 'data_' . $subfield; } if ($operator == '%=') { $ft = new DatabaseQuerySelectFulltext($query); $ft->match($table, $subfield, $operator, $value); return $query; } return parent::getMatchQuery($query, $table, $subfield, $operator, $value); } Thank you.
    1 point
  28. Hello all, I've just pushed a rather alpha version of this module to a new branch on github. The localisation branch adds a few new features that might be of interest. Update default countries list (in English) with names from the country-list project. Use LibLocalisation (if installed) to localise country select lists in the Inputfield. Allow localisation of config and inputfield select lists to the language of the user's browser. Switch to storing ISOs in uppercase, can still handle stored lowercase ISO codes. Unify country list loading code. Detect changes to input address when saving page. Add compatibility with FormBuilder. You'll need to do a manual update from the new branch to try this out. Backup first please. I'm pushing this now in its alpha-state, as I've had a few health problems recently and don't want to hold off making this available any longer.
    1 point
  29. @gregory @Jonathan Lahijani I tested it (but not with all the Custom Embed option), it works with the Custom Embed options C and D. Use the following hook : <?php namespace ProcessWire; // the captcha module $captcha = $this->modules->get("MarkupGoogleRecaptcha"); // hook FormBuilder $forms->addHookBefore('FormBuilderProcessor::renderReady', function ($e) use ($captcha) { $form = $e->arguments(0); // do some custom check here ... if ($captcha->data_recaptcha_type === 'invisible') { // invisible captcha $captcha->render($form); $f = $this->modules->get("InputfieldHidden"); $f->attr('id+name', 'login_submit'); $f->value = 'login_submit'; $form->append($f); } else { // recaptcha v2 $f = $this->modules->get("InputfieldMarkup"); $f->value = $captcha->render(); foreach ($form->children as $field) { if ($field instanceof InputfieldSubmit) { // find the submit button $form->insertBefore($f, $field); // insert reCAPTCHA before the submit button } } } }); I will test later to see if it's possible to embed the captcha into an IFrame.
    1 point
  30. Don't have a chance to look into this right now, but is anyone having issues on PHP 7.3? Saw a comment on the module listing from Alex Capes about it breaking. In the meantime, I've opened up an issue over at GitLab: https://gitlab.com/rockettpw/seo/jumplinks-one/issues/1 @Karinne Cyphers - only saw your note now, sorry about that! It's likely due to rules 16a/16b in htaccess. 16a limits the characters allowed in a URL, so hits would never even boot up ProcessWire. Try changing to 16b (and adding the tilde if it's not there). โ€”โ€”โ€” Future Development / v2 I profusely apologise for how long it's taken to get things done for v2. As some of you know, my daily responsibilities have taken over, and committing time to open-source projects is not there as it once was. I'd love to be able to say that I can try find some time to get to it, but it's simply a promise I can't make or keep, unfortunatelyโ€ฆ The way I see it, there are two options on the table. First is to wait it out (I know, I knowโ€ฆ) โ€“ I do have a project board on the old repo, so I know what stands where and what I'd envisioned for the module, and can pick things up where I left off last (phew, haven't touched jQuery in forever โ€“ that might be a challenge), when the time avails itself. Technically, I'm about half way there but there's still quite a bit of work to do in terms of frontend. Second option would be for someone to take over the project. It'd definitely need to be someone who can commit the time to its development, and develop in line with the way in which the module has been built so far (there's a decent amount of SoC going on, and the module is built up using packages such as Eloquent, FastRoute, etc.). Alternatively, as a third option, we could take a multi-contributor approach. So, if anyone is interested, feel free to send me a DM and we can chat about it.
    1 point
  31. Hi @zoeck Sorry I missed your post previously. If you are still looking for LDAP integrations there are 3 that I know of... LdapSignIn from Conclurer. KreativMonkey's LDAP Helper. JimYost's LDAP Authentication module posting on the forum, though you might want to go with Apeisa's implementation further down the thread. ...but I suspect you've written your own by now ๐Ÿ™‚ Hope that helps.
    1 point
  32. This module has just been made public under a MIT license. The opening post has been updated to reflect its release.
    1 point
  33. You got me thinking. I do work as a single developer, but increasingly I'm finding I want to deploy solutions I've developed for one project to another, and just copying and pasting via the admin isn't ideal. I was having a look at Silverstripe recently, as I have a possible project where Processwire, though I'm sure can do the job, might meet some resistance, whereas Silverstripe will almost certainly be accepted as it's mandated as the CMS of choice by government here (NZ). What struck me is that you can do far more with Processwire with less coding, but in some cases defining data structures via coding rather than via an admin UI may be more appropriate for sharing code between projects or in the case of a team between team members. Processwire is perfectly capable of doing this as the admin UI is just a layer on top of the API, so there's no reason why fields and templates can't be defined programmatically in modules that are subject to version control. I notice that some of the existing modules actually consist of several dependant sub-modules, bundled in a common folder, so it would be easy to set up something like this with git version control. Silverstripe automatically rebuilds database schema by using a /build URL, however it doesn't remove unneeded fields or tables after a schema change, whereas the Processwire API makes it fairly easy to both add and remove fields via a module. Processwire will detect changes to a module version, and run any update process automatically, so even though it bypasses the ease of use of the admin UI, developing your database schema programmatically in modules might ease collaborative development.
    1 point
  34. Hi all, hopefully this is the correct (sub)forum to ask. I'm trying to undertake my first real (worthy?) module. I understand Textformatters, Markup, and Process modules, but I'm now looking to, I believe, create a module that behaves similarly to the Map Marker module(s); in my case I'm looking to add book information from an external service (insert ISBN or title into a text field and the service returns data that can then fill in other various fields). I'm confused for a few reasons...it seems I was not the only one. 1. Inputfield vs Fieldtype: I compared Ryan's FieldtypeMapMarker module and noticed that it also contained an Inputfield module. From the documentation's description between Fieldtypes and Inputfields I had a hard time discerning where my particular module would be categorized -- is this because I would also need two modules? Fieldtype: "Fieldtypes are modules that define a data type and field used to hold content for pages", and Inputfield: " One to gather input, and the other that handles the additional data (ex: author, publication date, cover art URL, etc.), that would otherwise be non-core? 2. For examples, I was trying to compare a few different FieldType modules, I looked at FieldtypeMapMarker by Ryan, FieldtypeDimension by soma, and InputfieldFlickr by apeisa (not a Fieldtype, but does something similar to MapMarker). They each seem to handle things differently (or perhaps I was looking too closely at comparing Flickr to MapMarker). When comparing any of these to the newer markup for module code I think I was just looking at too much all at once, but...are there actually multiple ways to go about doing the same thing that is fully supported by the CMF? 3. In what instances would a Fieldtype not also have an Inputfield (or some other form of input)? If not, is a Fieldtype simply a glue module? I'm also trying to determine if there are any other specific methods that are used/required solely for Fieldtypes by ProcessWire... Hopefully someone can help me clarify all of this. Thank you if you can!
    1 point
  35. It seems that, when developing a Fieldtype that requires user input (Inputfield, in this case), both modules must be developed in tandem? In other words, it's not something that could easily be tested against during development to create just the Fieldtype, or just an Inputfield (again, for something like this)? I didn't see your Edit before, but that was very helpful, as well as the mention of extending FieldtypeMulti (instead of just Fieldtype) -- thank you!! ...just saw the Module.php file in core -- so THAT's where all of the documentation is!
    1 point
  36. Simply put: a field is an interface to DB, an inputfield is an interface to user. One does not necessitate the other, but for some complex data types, you may need to build a custom inputfield (like MapMarker). If you're going to store information about multiple books on a single page, then you need to extend FieldtypeMulti class (FieldtypeEvents, FieldtypeNotifications, FieldtypeComments for example), to store information about a single book per page, you need to extend regular Fieldtype class (FieldtypeText, FieldtypeDatetime etc). If you want to allow more than 1 property to be used in selectors, then you need to use multiple table column in DB. This means you need to override getDatabaseSchema() method and specify a more complex table structure. Edit: Based on your description, you expose only one input to the user for ISBN/title, filling the rest is up to you (by fetching from a web service). You have two options: either fetch the data using fieldtype or using inputfield. Using inputfield to do fetch the rest of the data sounds more appropriate, because the purpose of the fieldtype is validation, formatting, sanitization querying and saving data from/to database, i.e. it only deals with the given data. An inputfield, however, collects and prepares all data that needs to be written to the database and presents it to a fieldtype.
    1 point
  37. Besides @kongondo's evergreen post, I also recommend this one:
    1 point
ร—
ร—
  • Create New...