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
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
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
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
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...

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?

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.

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;

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.

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.

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.

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. :-)

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.

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...

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. :)

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.

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.

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. :-)

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By monollonom
      (once again I was surprised to see a work of mine pop up in the newsletter, this time without even listing the module on PW modules website 😅. Thx @teppo !)
      Github: https://github.com/romaincazier/FieldtypeQRCode
      Modules directory: https://processwire.com/modules/fieldtype-qrcode/
      This is a simple module I made so a client could quickly grab a QR Code of the page's url in the admin.
      There's not much to it for now, but if need be you can output anything using a hook:
      $wire->addHookAfter("FieldtypeQRCode::getQRText", function($event) { $event->return = "Your custom text"; }) You can also output the QR code on your front-end by calling the field:
      echo $page->qr_code_field; The module uses the PHP library QR Code Generator by Kazuhiko Arase. When looking for a way to generate a QR Code in PW I came across @ryan's integration in his TFA module. I'm not very familiar with fieldtype/inputfield module development so I blindly followed @bernhard (great) tutorial and his BaseFieldtypeRuntime. At some point I'll take a deeper look to make a module on my own.
      Some ideas for improvements :
      add the ability to choose what to ouput : page's url / editUrl / file(s) / image(s) / ... allow to output multiple QR codes ?
    • By Chris Bennett
      https://github.com/chrisbennett-Bene/AdminThemeTweaker
      Inspired by @bernhard's excellent work on the new customisable LESS CSS getting rolled into the core soon, I thought I would offer up the module for beta testing, if it is of interest to anyone.

      It takes a different approach to admin styling, basically using the Cascade part of CSS to over-ride default UiKit values.
      Values are stored in ModuleConfig Module creates a separate AdminThemeTweaker Folder at root, so it can link to AdminThemeTweaker.php as CSS AdminThemeTweaker.php reads the module values, constructs the CSS variables then includes the CSS framework Can be switched on and off with a click. Uninstall removes everything, thanks to bernhard's wonderful remove dir & contents function.
      It won't touch your core. It won't care if stuff is upgraded. You won't need to compile anything and you don't need to touch CSS unless you want to.

      It won't do much at all apart from read some values from your module config, work out the right CSS variables to use (auto contrast based on selected backgrounds) and throw it on your screen.
      You can configure a lot of stuff, leave it as it comes (dark and curvy), change two main colors (background and content background) or delve deep to configure custom margins, height of mastheads, and all manner of silly stuff I never use.

      Have been developing it for somewhere around 2 years now. It has been (and will continue to be) constantly tweaked over that time, as I click on something and find something else to do.
      That said, it is pretty solid and has been in constant use as my sole Admin styling option for all of those 2 years.

      If nothing else, it would be great if it can provide any assistance to @bernhard or other contributor's who may be looking to solve some of the quirkier UiKit behavior.
      Has (in my opinion) more robust and predictable handling of hidden Inputfields, data-colwidths and showIf wrappers.
      I am very keen to help out with that stuff in any way I can, though LESS (and any css frameworks/tools basically) are not my go.
      I love CSS variables and banging-rocks-together, no-dependency CSS you can write with notepad.



       

    • By opalepatrick
      I see old posts saying that repeaters are not the way to go in Custom Process Modules. If that is the case, when using forms (as I am trying to do) how would one tackle things like repeat contact fields where there can be multiple requirements for contact details with different parameters? (Like point of contact, director, etc) or even telephone numbers that have different uses?
      Just for background I am creating a process module that allows me to create types of financial applications in the admin area (no need to publish any of this, pure admin) that require a lot of personal or company information.
      Maybe I am thinking about this incorrectly?
    • By HMCB
      I ran across a reference to IftRunner module. The post was 6 years ago. I cant find it in available modules. Has it been pulled?
    • By tcnet
      PageViewStatistic for ProcessWire is a module to log page visits of the CMS. The records including some basic information like IP-address, browser, operating system, requested page and originate page. Please note that this module doesn't claim to be the best or most accurate.
      Advantages
      One of the biggest advantage is that this module doesn't require any external service like Google Analytics or similar. You don't have to modify your templates either. There is also no Javascript or image required.
      Disadvantages
      There is only one disadvantage. This module doesn't record visits if the browser loads the page from its browser cache. To prevent the browser from loading the page from its cache, add the following meta tags to the header of your page:
      <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="0" /> How to use
      The records can be accessed via the Setup-menu of the CMS backend. The first dropdown control changes the view mode.

      Detailed records
      View mode "Detailed records" shows all visits of the selected day individually with IP-address, browser, operating system, requested page and originate page. Click the update button to see new added records.

      Cached visitor records
      View modes other than "Detailed records" are cached visitor counts which will be collected on a daily basis from the detailed records. This procedure ensures a faster display even with a large number of data records. Another advantage is that the detailed records can be deleted while the cache remains. The cache can be updated manually or automatically in a specified time period. Multiple visits from the same IP address on the same day are counted as a single visitor.

      Upgrade from older versions
      Cached visitor counts is new in version 1.0.8. If you just upgraded from an older version you might expire a delay or even an error 500 if you display cached visitor counts. The reason for this is that the cache has to be created from the records. This can take longer if your database contains many records. Sometimes it might hit the maximally execution time. Don't worry about that and keep reloading the page until the cache is completely created.
      Special Feature
      PageViewStatistic for ProcessWire can record the time a visitor viewed the page. This feature is deactivated by default. To activate open the module configuration page and activate "Record view time". If activated you will find a new column "S." in the records which means the time of view in seconds. With every page request, a Javascript code is inserted directly after the <body> tag. Every time the visitor switches to another tab or closes the tab, this script reports the number of seconds the tab was visible. The initial page request is recorded only as a hyphen (-).

      Settings
      You can access the module settings by clicking the Configuration button at the bottom of the records page. The settings page is also available in the menu: Modules->Configure->ProcessPageViewStat.
      IP2Location
      This module uses the IP2Location database from: http://www.ip2location.com. This database is required to obtain the country from the IP address. IP2Location updates this database at the begin of every month. The settings of ProcessPageViewStat offers the ability to automatically download the database monthly. Please note, that automatically download will not work if your webspace doesn't allow allow_url_fopen.
      Dragscroll
      This module uses DragScroll. A JavaScript available from: http://github.com/asvd/dragscroll. Dragscroll adds the ability in view mode "Day" to drag the records horizontally with the mouse pointer.
      parseUserAgentStringClass
      This module uses the PHP class parseUserAgentStringClass available from: http://www.toms-world.org/blog/parseuseragentstring/. This class is required to filter out the browser type and operating system from the server request.
×
×
  • Create New...