Jump to content

Recommended Posts

Tonight I restored the database to get JumpLinks back and tried a bit further.

To get some traffic on the site, I used a dead link checker with some threats (not to many) to challenge it. Then the trouble started.

The problem I got indicated an unnormal behavior like a loop. Too many requests.

I found out that it is not the links.

I had an entry in the module's Legacy Domain field. Example: http://domain.de/drupal/.

There might have been a loop, maybe simply because the new site is https://domain.de only.

Or there is some other problem with that field (or a misunderstanding from my side, what it does).

Removing that entry (I forgot about that entry this morning - since the field is always collapsed) cured the issue, I think.

Site and server are up to speed, regardless of running the link-checker again.

Share this post


Link to post
Share on other sites

Essentially, that field is checked every time a a 404 is hit and you haven't defined a jumplink for it - it checks to see if https://domain.de/foo exists at http://domain.de/drupal/foo. As such, one should only specify a Legacy Domain when they're performing a slow migration to ProcessWire. That way, visitors and users can still access content if it hasn't been moved yet. Then, when everything has moved, you can strip away the Legacy Domain.

I collapsed the field by default as it isn't often used, and don't want it to get in the way. If I try to make it so the group expands if one of its fields contains data, it will always expand as status code field contains data by default. That said, I'll probably land up keeping it expanded anyway.

With all of that to one side, I'd still like to know how those particular errors came about... I assuming some kind of infinite loop took place, but don't know exactly what that entails. Perhaps someone with extensive knowledge of how PageFinder works could enlighten me?

Share this post


Link to post
Share on other sites

i have a site which was using redirects and am migrating those into Jumplinks.

when i try to import, i get errors and can't import..

Table 'walsh_prowire26.processredirects' doesn't exist SELECT * FROM processredirects ORDER BY redirect_from#0 [internal function]: Database->query('SELECT * FROM p...')

this is an older site but it does show i'm running the latest process redirects module

Share this post


Link to post
Share on other sites

i have a site which was using redirects and am migrating those into Jumplinks.

when i try to import, i get errors and can't import..

Table 'walsh_prowire26.processredirects' doesn't exist SELECT * FROM processredirects ORDER BY redirect_from#0 [internal function]: Database->query('SELECT * FROM p...')

this is an older site but it does show i'm running the latest process redirects module

Hmm, weird. Have you confirmed that the table actually exists using phpMyAdmin or similar?

Share this post


Link to post
Share on other sites

for some reason the table in my install is upper camel case, so the table is called ProcessRedirects.. i wonder if i should try changing it

on another note - is there any functionality to find a page based on a field - for example, i have the legacy IDs stored with the pages themselves, and i was using get vars on a template to redirect to the page; wondering if JL can handle this.

so instead of a mapping collection you would have a selector?

template=product-legacy, legacy_item_id={id}

one last thing - the start and end both say 2015 years ago

Share this post


Link to post
Share on other sites

That's more than likely it - changing it shouldn't be a problem, especially if you're migrating.

I quite like that idea, albeit being a little out of the ordinary (who likes ordinary anyway?). I'd probably have to set it up so that get: prefaces the selector. That way, we can tell if you're using one. So, in your case, it would be get: template=product-legacy, legacy_item_id={id}.

Lemme give that a bash quickly.

Share this post


Link to post
Share on other sites

ok - i renamed it then ran the import; that seemed to have worked, but then when i renamed it back to ProcessRedirects, Jumplinks doesn't show those anymore

ok i didn't actually click the final import button; so i went into the jumplinks module, renamed the tables to ProcessRedirects, and then ran the import but it only took the first redirect; now it won't let me do it over

Share this post


Link to post
Share on other sites

That's even weirder - they're completely independent of each other... Are you saying that the jumplinks don't show after the import?

Oh, that's a nice whoops right there. Happened to me too at some point during testing. To solve it:

  1. Make sure that the table is named processredirects.
  2. Go into the modules table and check for "redirectsImported":true in the data column for the ProcessJumplinks row.
  3. Change it to false.

Then you should be able to do the import again.

I'll be changing this behaviour soon to help this along automatically. There'll probably be a new button (or link) to say "No, wait! It didn't work."

Share this post


Link to post
Share on other sites

yeah - sorry - to clarify and answer the above post, i failed to click the last import button, so no problem there;

on my 2nd try i renamed the database in the Jumplinks Module wherever it said processredirects i renamed to ProcessRedirects; then i ran the import but it only imported the first one;

i can't see how JL queries would have worked because looking at the Redirect module, (unless for some reason i have a legacy version that isn't showing it needs to be updated), it uses $this->className for the queries

Share this post


Link to post
Share on other sites

I used the raw table name (processredirects) as that what was in my database when I wrote the module. In fact, I've just installed a fresh copy of it, and the table is called "processredirects". Perhaps this could be different versions of MySQL changing the case at runtime?

Share this post


Link to post
Share on other sites

right - yes it must be a case sensing issue with MySQL. this one i'm running is 5.5.40-36.1-log

processRedirects does fail if i rename the table to all lowercase

Share this post


Link to post
Share on other sites

Fascinating - I never thought such an issue would come up. (Not a brightspark when it comes to things like that. And case-sensitive stuff never impacts me as I use Windows. In fact, that could even be the issue - though, I doubt it because only Unix filesystems are sensitive; I wouldn't think that would expand to MySQL.)

Anyways, I've just attempted the selector idea, currently on the dev branch. Basically, you can to define your destination path like so:

[[template=product-legacy, legacy_item_id={id}]]

So that means that anything in double-square-brackets is to be treated as a selector.

I've used the following to check - hopefully it is enough...

$convertedWildcards = preg_replace_callback("~\[\[([\w-_\/\s=\",.']+)\]\]~i", function ($mapCaptures) {
	$page = $this->pages->get($mapCaptures[1]);
	if ($page->id) {
		return ltrim($page->url, '/');
	}
}, $convertedWildcards);

My test yielded the following log:

Page not found; scanning for jumplinks...
- Checked at: Thu, 16 Apr 2015 17:30:56 +0200
- Requested URL: http://processwire.dev.local/legacy?id=43
- PW Version: 2.5.26

== START ==

[Checking jumplink #177]
- Original Source Path:         legacy?id={id}
- Escaped Source Path:          legacy\?id={id}
- After Smart Wildcards:        legacy\?id={id:num}
- Compiled Source Path:         legacy\?id=(\d+)
- Original Destination Path:    [[template=basic-page,legacy_item_id={id}]]
- Compiled Destination Path:    http://processwire.dev.local/testing-this-page/

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

- From URL:   http://processwire.dev.local/legacy?id=43
- To URL:     http://processwire.dev.local/testing-this-page/

Which means it works. Nonetheless, please give it a test-run and let me know if you run into any issues, or if anything needs to be enhanced.

Once we're all happy, I'll pull to master and update the docs.

  • Like 2

Share this post


Link to post
Share on other sites

wow amazing.. will test asap.

how can i reset things and try the import again - still the issue that my PR import failed...

Share this post


Link to post
Share on other sites

wow amazing.. will test asap.

Great!

how can i reset things and try the import again - still the issue that my PR import failed...

You could either do as I suggested before and set the redirectsImported setting to false or, if that fails, re-install the module and repeat.

Edit: It seems that MySQL table names are case-sensitive on most Unix-varieties. That said, I don't understand why the table is being created as processredirects and not ProcessRedirects on my system, when it is clearly instructed to use the latter...

Can anyone point me in the right direction with this? I don't think it would be wise to change it unless there's a better way.

Share this post


Link to post
Share on other sites

ok thanks - sorry didn't see those instructions; will be back on this tonight and will report back...

  • Like 1

Share this post


Link to post
Share on other sites

it will only import 1 link at a time from the redirects module;

i was able to get 2 of them imported by importing then going to the database, changing the setting to false, importing the next one, etc.. but there must be some problem;

also, i can't get the selector to work; i have this entered in the source:

store_item_detail.cfm?item_ID={id}

and this entered in the  destination:

[[template=product-legacy,legacy_item_id={id}]]

but no luck in terms of it forwarding to the page, just getting 404 and no log with debug on, and the forward doesn't work with debug off;

Share this post


Link to post
Share on other sites

@All: I have just submitted a fix to the dev branch relating to this issue. It will be merged in soon with the other commits.

@Macrura: Something must have broken with the import feature -- I will look into that this evening. Regarding the selector, there must be something shown in the debug log - it can never be empty. The following should happen: if a selector is found, it will check to see if a page by that selector exists. If one doesn't it will skip the jumplink. If debug mode is turned on in the module's config, then it will tell you that it found a selector, but it doesn't map to a page. Please could you double-check the log, and paste its content here?

Update: Confirmed, I can reproduce the import problem. Will fix that shortly.

Fixed: Okay, I've fixed the import issue (dev branch). Was an oversight when moving to prepared statements. So that's working now. :-)

Share this post


Link to post
Share on other sites

hi mike - where should i look for the log, checked the module, and site/assets, but not seeing any logs;

also getting this...

Mysqli was instantiated and queries were made. These should ideally be converted to PDO ($database). Here are the queries:

0 SELECT * FROM process_jumplinks ORDER BY source [4 rows] [0.0321s, 0.0321s, 0.0365979671478s] 1 SELECT * FROM process_jumplinks_mc ORDER BY collection_name [0 rows] [0.0181s, 0.0502s, 0.136598110199s]

Share this post


Link to post
Share on other sites

When you turn on debug mode and request the URI in your browser, the log will appear there instead of redirecting.

Interesting - I haven't seen that before. I'll have a look at it now now.

Edit: Ah, I see. I'm using the db object. Changing it will mean a little bit of refactoring and more testing, so I'll have a look at that tomorrow - have had quite a long day.

Share this post


Link to post
Share on other sites

also, i'm still needing to rename the tables in the module to ProcessRedirects, since i'm on unix..

But now it worked, so all of my original redirects are now imported- thanks!

will carry on testing the selector redirect now..

Share this post


Link to post
Share on other sites

also, i'm still needing to rename the tables in the module to ProcessRedirects, since i'm on unix

I find it interesting that it is specifically making the table name lower case on my side. I'm going to need to look at this properly as well. I think I'll land up just doing a test at runtime to see which one it is...

Share this post


Link to post
Share on other sites

i think the selector redirect is working, wow that's so cool; and i'm seeing the debug log now.

  • Like 1

Share this post


Link to post
Share on other sites

Okay, I hope I've fixed this (dev branch). Unfortunately not able to test as my tables are always lower case. An initial import run still works on my side. If you don't mind, please could you test it on yours?
 
For reference, I've used the following to ensure the correct case is being used. If anyone thinks this can be optimised, please let me know. Thanks.

// Get the correct table name for ProcessRedirects
$redirectsTableNameQuery = $this->database->prepare("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = :db_name AND TABLE_NAME LIKE :table_name");
$redirectsTableNameQuery->execute(array(
	'db_name' => $this->config->dbName,
	'table_name' => $this->redirectsTableName, // defaults to ProcessRedirects; which we use to check
));
$redirectsTableNameResult = $redirectsTableNameQuery->fetch(PDO::FETCH_OBJ)->TABLE_NAME;
if ($this->redirectsTableName == $redirectsTableNameResult || strtolower($this->redirectsTableName) == $redirectsTableNameResult) {
	$this->redirectsTableName = $redirectsTableNameResult;
}

Edit: My bad, didn't actually change the select statements. Shall commit that shortly, along with some other enhancements.

  • Like 1

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 Gadgetto
      SnipWire - Snipcart integration for ProcessWire
      Snipcart is a powerful 3rd party, developer-first HTML/JavaScript shopping cart platform. SnipWire is the missing link between Snipcart and the content management framework ProcessWire.
      With SnipWire, you can quickly turn any ProcessWire site into a Snipcart online shop. The SnipWire plugin helps you to get your store up and running in no time. Detailed knowledge of the Snipcart system is not required.
      SnipWire is free and open source licensed under Mozilla Public License 2.0! A lot of work and effort has gone into development. It would be nice if you could donate an amount to support further development:

      Status update links (inside this thread) for SnipWire development
      2020-01-28 -- added Custom Order Fields feature (first SnipWire release version is near!) 2020-01-21 -- Snipcart v3 - when will the new cart system be implemented? 2020-01-19 -- integrated taxes provider finished (+ very flexible shipping taxes handling) 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 Plugin Key Features
      Fast and simple store setup Full integration of the Snipcart dashboard into the ProcessWire backend (no need to leave the ProcessWire admin area) Browse and manage orders, customers, discounts, abandoned carts, and more Process refunds and send customer notifications from within the ProcessWire backend Process Abandoned Carts + sending messages to customers from within the ProcessWire backend Complete Snipcart webhooks integration (all events are hookable via ProcessWire hooks) Integrated taxes provider (which is more flexible then Snipcart own provider) Useful Links
      SnipWire in PW modules directory (alpha version only available via GitHub) SnipWire Docs (please note that the documentation is a work in progress) SnipWire @GitHub (feature requests and suggestions for improvement are welcome - I also accept pull requests) Snipcart Website  
      ---- INITIAL POST FROM 2019-05-25 ----
       
    • 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 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...