Jump to content

Recommended Posts

New commits to the dev branch synced. Fixed the select statements, as mentioned above (still working here). Also, if the import from ProcessRedirects gets botched somehow, you can now try again. It doesn't keep track of the state of ProcessRedirects, so if you uninstall and reinstall it, the importer will still offer you the opportunity. However, that isn't an issue in my eyes as such a process-flow is not practical.

Hoping to merge into master as soon as possible. I'll give it another day (or just less, keeping in mind the severity of the issues encountered with the current 1.1.3) for more feedback until I merge.

  • Like 1

Share this post


Link to post
Share on other sites

Before I merge, I'd actually like to discuss the behaviour of the new selectors feature.

In its current state, you specify a selector in your destination path using square brackets ([[your-selector-goes-here]]). However, you can also use multiple selectors, and prepend and append to them, which I don't think it actually the right way to do it. Prepending a string to a selector will cause a redirect to a non-existent page. As such, I propose the following:

Instead of using double-square brackets to return the URL of the new destination page (using $page->url), I think it should return the name. This is handy when you want to redirect /blog/2015/<oldname> to /journal/<newname>/, for example.

Then, to return a full URL, we should use use find: as a prefix to the selector - find: template=basic-page, legacy_name={name}, for example.

post-2289-0-13332000-1429352189_thumb.pn

What do you think?

  • Like 1

Share this post


Link to post
Share on other sites

@Mike - this is really great, especially the new features;

and a lot of care went into the documentation, and is much appreciated.. i hope others will find this useful!

will be upgrading that site i was testing on and report back any issues.

  • Like 1

Share this post


Link to post
Share on other sites

@Macrura

Thanks - I'm glad you're liking it. Yeah, documentation is pretty important to me, and so I make sure I do it to the best of my ability. Originally, I wanted to host the documentation myself, but thought the GH wiki system would be perfect enough for the task.

Regarding the selectors, I'm going to leave the implementation as-is for now (as mentioned in the docs).

  • Like 2

Share this post


Link to post
Share on other sites

Small update committed to dev branch: Debug Mode now shows conversion notes for each wildcard, as in the example below. This gives a little more insight, which I think is quite useful.

Page not found; scanning for jumplinks...
- Checked at: Fri, 24 Apr 2015 12:18:16 +0200
- Requested URL: http://processwire.dev.local/Articles/2015/4/24/Hello%20World.HTML
- PW Version: 2.5.27

== START ==

[Checking jumplink #12]
- Original Source Path:         Articles/{year}/{month}/{day}/{all}.{ext}
- After Smart Wildcards:        Articles/{year:num}/{month:num}/{day:num}/{all:all}.{ext:ext}
- Compiled Source Path:         Articles/(\d+)/(\d+)/(\d+)/(.*).(aspx|asp|cfm|cgi|fcgi|dll|html|htm|shtml|shtm|jhtml|phtml|xhtm|xhtml|rbml|jspx|jsp|phps|php4|php)
- > Wildcard Check:             1> year = 2015 -> 2015
- > Wildcard Check:             2> month = 4 -> 4
- > Wildcard Check:             3> day = 24 -> 24
- > Wildcard Check:             4> all = Hello%20World -> hello-world
- > Wildcard Check:             5> ext = HTML -> html
- Original Destination Path:    blog/{all}/
- Compiled Destination Path:    http://processwire.dev.local/blog/hello-world/

Match found! We'll do the following redirect (301, permanent) when Debug Mode has been turned off:

- From URL:   http://processwire.dev.local/Articles/2015/4/24/Hello%20World.HTML
- To URL:     http://processwire.dev.local/blog/hello-world/

I have a few plans in the pipeline, such as the ability to use your own expressions, but not decided yet.

Lastly, an issue came up a few days ago, where a jumplink is not working. I'm sure it has something to do with timed activation, and will look into it when I have more information. Seems that the end time (when not specified) is not being calculated properly. Normally, it would create a dummy time. I may actually need to look at redoing the whole timed activation feature...

Share this post


Link to post
Share on other sites

Hi Mike, all of my jumplinks have:

2015 years ago

in the start AND end column;

but the fields are all empty, no timed activation. None of the jumplinks work, even though in debug mode it shows

Match found! We'll do the following redirect (302, temporary) when Debug Mode has been turned off:

- From URL:   http://www.ohmspeaker.com/1/Bookshelf-Speakers.html
- To URL:     http://www.ohmspeaker.com/speakers/walsh-bookshelf/
- Timed:      From Wed, 30 Nov -001 00:00:00 -0500 to Wed, 30 Nov -001 00:00:00 -0500

if i go in and set a start and end date for the jumplink, it does work! but i guess this needs to be fixed?

Share this post


Link to post
Share on other sites

Hey Macrura - yeah, this seems to be quite weird. I'm sure it has something to do with storing null dates. Can you check in phpMyAdmin (or whatever you use) what the date is in the DB?

Share this post


Link to post
Share on other sites

hi Mike - here is how the date is formatted:

0000-00-00 00:00:00

Share this post


Link to post
Share on other sites

That is indeed how it should be... I assume you're running on Linux? I develop on Windows, and it appears that most of the troubles that have come up relate to OS differences...

I think I'm going to need to spend some time refactoring Jumplinks.

Share this post


Link to post
Share on other sites

I see 2015 years ago also, but only on the Mac (localhost dev server using MAMP). On the Linux 2.4 live server the dates are correct.

Share this post


Link to post
Share on other sites

yes, linux/apache

- mySQL  5.5.40-36.1-log

- PHP 5.4.3

also, i have another site on the same server and on that one everything works fine; no dates are show in the columns, they are empty.

on the problem site which is using the dev version of the module (latest, downloaded today) these were all imported from ProcessRedirects, but then some were added after that and all of the rows show the 2015 years ago;

Share this post


Link to post
Share on other sites

also, i have another site on the same server and on that one everything works fine; no dates are show in the columns, they are empty.

Those columns shouldn't be empty at all. If no date is specified, it should use 0000-00-00 00:00:00.

on the problem site which is using the dev version of the module (latest, downloaded today) these were all imported from ProcessRedirects, but then some were added after that and all of the rows show the 2015 years ago;

Also finding that to be quite strange because both the importer and the 'editor' use the same function (commitJumplink) to insert the jumplink.

Going to test this out on my Linux server to see if I can reproduce this.

Update: Okay, I'm able to reproduce this in CloudLinux running LightSpeed (and, thus, I'm sure many other nix setups will be the same). However, in my case, the date columns are not empty, but contain the zero date. I'll try and figure out what's going on.

Share this post


Link to post
Share on other sites

Mike, just curious why you are saving a zero dates? Shouldn't empty suffice and just check if $date_start and $date_end are empty?

Share this post


Link to post
Share on other sites

Mike, just curious why you are saving a zero dates? Shouldn't empty suffice and just check if $date_start and $date_end are empty?

At first, I was using NULL dates, but that seemed to break on some systems. I then saw that PW uses zero dates, and so used them instead. As the column type is TIMESTAMP, can I even save empty strings?

Edit: Although, I see where I am perhaps wrong. PW uses the following schema

Type          Not Null   Default
TIMESTAMP     TRUE       0000-00-00 00:00:00

Whereas Jumplinks uses:

Type          Not Null   Default
TIMESTAMP     FALSE      NULL

Whilst the default is NULL, Jumplinks sends a zero date to the database.

Will work on this shortly.

Share this post


Link to post
Share on other sites

Seemingly, PW compares dates in the database to the $lowestDate of 1974-10-10.

I've updated the dev branch to do pretty much the same thing. Also, I have changed the schema of the date_start and date_end columns. The schema will update automatically. To me, this seems to be the better approach. Sure, I could use NULL dates, but recall that giving me problems before.

I have tested on Windows, CloudLinux and CentOS. I'm sure the fix will work just fine on OS X and other nix variants, but please can those affected confirm for me?

As soon as this is confirmed to be fixed, I'll push 1.2.1 to master.

Thanks.

Share this post


Link to post
Share on other sites

In the context of dates, what I really would find useful, is a date for the latest hit.

So I could, after a period of time, delete those redirects, which had no hits since that period, so those links don't seem to matter any more. That helps to keep my list short. :-)

Share this post


Link to post
Share on other sites

In the context of dates, what I really would find useful, is a date for the latest hit.

So I could, after a period of time, delete those redirects, which had no hits since that period, so those links don't seem to matter any more. That helps to keep my list short. :-)

Indeed, that could be quite useful, and is better than a full-on hit log, as I wanted to do at the beginning. This will also be helpful for an upcoming site migration, so will implement this soon.

Share this post


Link to post
Share on other sites

Those columns shouldn't be empty at all. If no date is specified, it should use 0000-00-00 00:00:00.

Update: Okay, I'm able to reproduce this in CloudLinux running LightSpeed (and, thus, I'm sure many other nix setups will be the same). However, in my case, the date columns are not empty, but contain the zero date. I'll try and figure out what's going on.

I meant that the columns in the PW admin are blank; i didn't check the dates in the database, for the particular site that works...

Share this post


Link to post
Share on other sites

I meant that the columns in the PW admin are blank; i didn't check the dates in the database, for the particular site that works...

Ah, indeed. Those should be blank when not in use.

I'm sure the latest fix will work for you - please let me know if it does. :)

Share this post


Link to post
Share on other sites

I'm getting an error with mysql version: 5.6.24

SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: 'null' for column 'date_start' at row 1

the error occurs when you don't populate either the start or end dates for a new jumplink.

Elsewhere it has been caused by mysql v5.6 being a lot stricter with datetime fields. Where previous versions have just ignored certain data, v5.6 now raises an error.

Starting mysql with the switch: --sql-mode=ALLOW_INVALID_DATES

removes the issue.

Share this post


Link to post
Share on other sites

When using mysql v5.6 with the switch: --sql-mode=ALLOW_INVALID_DATES

blank start and end dates get set to 2015 years ago, the dev branch solved this but unfortunately didn't fix the sql error.

Share this post


Link to post
Share on other sites

my issues appear to be solved.. thanks Mike! looking forward to using this a lot now!!

Share this post


Link to post
Share on other sites

I'm getting an error with mysql version: 5.6.24

the error occurs when you don't populate both either the start or end dates for a new jumplink.

Elsewhere it has been caused by mysql v5.6 being a lot stricter with datetime fields. Where previous versions have just ignored certain data, v5.6 now raises an error.

Starting mysql with the switch: --sql-mode=ALLOW_INVALID_DATES

removes the issue.

Hi guy, and thanks for bringing that up - will sort that out this afternoon.

my issues appear to be solved.. thanks Mike! looking forward to using this a lot now!!

You're very welcome. :-)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By d'Hinnisdaël
      Happy new year, everybody 🥬
      I've been sitting on this Dashboard module I made for a client and finally came around to cleaning it up and releasing it to the wider public. This is how it looks.
      ProcessWire Dashboard

      If anyone is interested in trying this out, please go ahead! I'd love to get some feedback on it. If this proves useful and survives some real-world testing, I'll add this to the module directory.
      Download
      You can find the latest release on Github.
      Documentation
      Check out the documentation to get started. This is where you'll find information about included panel types and configuration options.
      Custom Panels
      My goal was to make it really simple to create custom panels. The easiest way to do that is to use the panel type template and have it render a file in your templates folder. This might be enough for 80% of all use cases. For anything more complex (FormBuilder submissions? Comments? Live chat?), you can add new panel types by creating modules that extend the DashboardPanel base class. Check out the documentation on custom panels or take a look at the HelloWorld panel to get started. I'm happy to merge any user-created modules into the main repo if they might be useful to more than a few people.
       Disclaimer
      This is a pre-release version. Please treat it as such — don't install it on production sites. Just making sure 🍇
      Roadmap
      These are the things I'm looking to implement myself at some point. The wishlist is a lot longer, but those are the 80/20 items that I probably won't regret spending time on.
      Improve documentation & add examples ⚙️ Panel types Google Analytics ⚙️ Add new page  🔥 Drafts 🔥 At a glance / Page counter 404s  Layout options Render multiple tabs per panel panel groups with heading and spacing between ✅ panel wrappers as grid item (e.g. stacked notices) ✅ Admin themes support AdminThemeReno and AdminThemeDefault ✅ Shortcuts panel add a table layout with icon, title & summary ✅ Chart panel add default styles for common chart types ✅ load chart data from JS file (currently passed as PHP array) Collection panel support image columns ✅ add buttons: view all & add new ✅
    • By Gadgetto
      Status update links (inside this thread) for SnipWire development will be always posted here:
      2020-01-14 --> new date range picker, discount editor, order notifiactions, order statuses, and more ... 2019-11-15 --> orders filter, order details, download + resend invoices, refunds 2019-10-18 --> list filters, REST API improvements, new docs platform, and more ... 2019-08-08 --> dashboard interface, currency selector, managing Orders, Customers and Products, Added a WireTabs, refinded caching behavior 2019-06-15 --> taxes provider, shop templates update, multiCURL implementation, and more ... 2019-06-02 --> FieldtypeSnipWireTaxSelector 2019-05-25 --> SnipWire will be free and open source If you are interested, you can test the current state of development:
      https://github.com/gadgetto/SnipWire
      Please note that the software is not yet intended for use in a production system (alpha version).
      If you like, you can also submit feature requests and suggestions for improvement. I also accept pull requests.
      ---- INITIAL POST FROM 2019-05-25 ----
      I wanted to let you know that I am currently working on a new ProcessWire module that fully integrates the Snipcart Shopping Cart System into ProcessWire. (this is a customer project, so I had to postpone the development of my other module GroupMailer).
      The new module SnipWire offers full integration of the Snipcart Shopping Cart System into ProcessWire.
      Here are some highlights:
      simple setup with (optional) pre-installed templates, product fields, sample products (quasi a complete shop system to get started immediately) store dashboard with all data from the snipcart system (no change to the snipcart dashboard itself required) Integrated REST API for controlling and querying snipcart data webhooks to trigger events from Snipcart (new order, new customer, etc.) multi currency support self-defined/configurable tax rates etc. Development is already well advanced and I plan to release the module in the next 2-3 months.
      I'm not sure yet if this will be a "Pro" module or if it will be made available for free.
      I would be grateful for suggestions and hints!
      Please have a look at the screenshots to get an idea what I'm talking about (open spoiler):
      (Please note: these screenshots are from an early development state of SnipWire. To see actual screens please have a look at later posts below!)
       
    • By Robin S
      This module is inspired by and similar to the Template Stubs module. The author of that module has not been active in the PW community for several years now and parts of the code for that module didn't make sense to me, so I decided to create my own module. Auto Template Stubs has only been tested with PhpStorm because that is the IDE that I use.
      Auto Template Stubs
      Automatically creates stub files for templates when fields or fieldgroups are saved.
      Stub files are useful if you are using an IDE (e.g. PhpStorm) that provides code assistance - the stub files let the IDE know what fields exist in each template and what data type each field returns. Depending on your IDE's features you get benefits such as code completion for field names as you type, type inference, inspection, documentation, etc.
      Installation
      Install the Auto Template Stubs module.
      Configuration
      You can change the class name prefix setting in the module config if you like. It's good to use a class name prefix because it reduces the chance that the class name will clash with an existing class name.
      The directory path used to store the stub files is configurable.
      There is a checkbox to manually trigger the regeneration of all stub files if needed.
      Usage
      Add a line near the top of each of your template files to tell your IDE what stub class name to associate with the $page variable within the template file. For example, with the default class name prefix you would add the following line at the top of the home.php template file:
      /** @var tpl_home $page */ Now enjoy code completion, etc, in your IDE.

      Adding data types for non-core Fieldtype modules
      The module includes the data types returned by all the core Fieldtype modules. If you want to add data types returned by one or more non-core Fieldtype modules then you can hook the AutoTemplateStubs::getReturnTypes() method. For example, in /site/ready.php:
      // Add data types for some non-core Fieldtype modules $wire->addHookAfter('AutoTemplateStubs::getReturnTypes', function(HookEvent $event) { $extra_types = [ 'FieldtypeDecimal' => 'string', 'FieldtypeLeafletMapMarker' => 'LeafletMapMarker', 'FieldtypeRepeaterMatrix' => 'RepeaterMatrixPageArray', 'FieldtypeTable' => 'TableRows', ]; $event->return = $event->return + $extra_types; }); Credits
      Inspired by and much credit to the Template Stubs module by mindplay.dk.
       
      https://github.com/Toutouwai/AutoTemplateStubs
      https://modules.processwire.com/modules/auto-template-stubs/
    • By Robin S
      Add Image URLs
      Allows images/files to be added to Image/File fields by pasting URLs.

      Usage
      Install the Add Image URLs module.
      A "Paste URLs" button will be added to all image and file fields. Use the button to show a textarea where URLs may be pasted, one per line. Images/files are added when the page is saved.
       
      https://github.com/Toutouwai/AddImageUrls
      https://modules.processwire.com/modules/add-image-urls/
    • By gebeer
      Hello all,
      sharing my new module FieldtypeImageReference. It provides a configurable input field for choosing any type of image from selectable sources. Sources can be: 
      a predefined folder in site/templates/ and/or a  page (and optionally its children) and/or the page being edited and/or any page on the site CAUTION: this module is under development and not quite yet in a production-ready state. So please test it carefully.
      UPDATE: the new version v2.0.0 introduces a breaking change due to renaming the module. If you have an older version already installed, you need to uninstall it and install the latest master version.
      Module and full description can be found on github https://github.com/gebeer/FieldtypeImageReference
      Install from URL: https://github.com/gebeer/FieldtypeImageReference/archive/master.zip
      Read on for features and use cases.
      Features
      Images can be loaded from a folder inside site/templates/ or site/assets Images in that folder can be uploaded and deleted from within the inputfield Images can be loaded from other pages defined in the field settings Images can be organized into categories. Child pages of the main 'image source page' serve as categories mages can be loaded from any page on the site From the API side, images can be manipulated like native ProcessWire images (resizing, cropping etc.), even the images from a folder Image thumbnails are loaded into inputfield by ajax on demand Source images on other pages can be edited from within this field. Markup of SVG images can be rendered inline with `echo $image->svgcontent` Image names are fully searchable through the API $pages->find('fieldname.filename=xyz.png'); $pages->find('fieldname.filename%=xy.png'); Accidental image deletion is prevented. When you want to delete an image from one of the pages that hold your site-wide images, the module searches all pages that use that image. If any page contains a reference to the image you are trying to delete, deletion will be prevented. You will get an error message with links to help you edit those pages and remove references there before you can finally delete the image. This field type can be used with marcrura's Settings Factory module to store images on settings pages, which was not possible with other image field types When to use ?
      If you want to let editors choose an image from a set of images that is being used site-wide. Ideal for images that are being re-used across the site (e.g. icons, but not limited to that).
      Other than the native ProcessWire images field, the images here are not stored per page. Only references to images that live on other pages or inside a folder are stored. This has several advantages:
      one central place to organize images when images change, you only have to update them in one place. All references will be updated, too. (Provided the name of the image that has changed stays the same) Installation and setup instructions can be found on github.
      Here's how the input field looks like in the page editor:

      If you like to give it a try, I'm happy to hear your comments or suggestions for improvement. Install from URL: https://github.com/gebeer/FieldtypeImageReference/archive/master.zip
      Eventually this will go in the module directory, too. But it needs some more testing before I submit it. So I'd really appreciate your assistance.
      Thanks to all who contributed their feedback and suggestions which made this module what it is now.
       
×
×
  • Create New...