Jump to content

Jumplinks


Mike Rockett

Recommended Posts

27 minutes ago, dragan said:

@Ben Sayers I'm by no means an expert on hooks, but I usually put hooks in ready.php, not init.php.

Hi Dragan, I'm not sure if it matters, but I use the beginner profile, I don't see a ready.php file - I only see that file in the Default or Regular profiles. 

Link to comment
Share on other sites

11 hours ago, Ben Sayers said:

I don't understand why the Jumplinks work with any page that doesn't contain "blog/".

Edit: I had the file named incorrectly (/site/_init.php) so I removed the underscore in the name and now I can see the dump is working but only for URLs that don't have "blog/" in them and I'm not redirected to the blog landing page, I get a 404. If I try a link with "blog/" in it, I see the blog landing page but the URL is still the old one instead of domain.com/blog/.

I have no experience with the blog module(s), but if a hook method attached to ProcessPageView::pageNotFound doesn't get executed at all for /blog/ URLs, this likely means one of two things: either there's no 404 exception when the user visits those URLs (i.e. the template of the page at /blog/ has URL segments enabled, but it isn't throwing 404 exception when a non-existing URL segment is accessed), or the module itself has some hook that prevents this from working.

The first option seems more likely to me, but again I don't have any experience with this module, so can't say for sure. This could also be by design, so maybe @kongondo could step in and see if he has an idea about what's going on here? 🙂

  • Like 1
Link to comment
Share on other sites

43 minutes ago, teppo said:

This could also be by design, so maybe @kongondo could step in and see if he has an idea about what's going on here? 🙂

 

43 minutes ago, teppo said:

module itself has some hook that prevents this from working.

Blog has only one hook, used in the backend, limited to save of a single blog post (addHookAfter) to set its blog published date (@note: this is NOT the PW published field but the blog pages date field)

 

43 minutes ago, teppo said:

(i.e. the template of the page at /blog/ has URL segments enabled, but it isn't throwing 404 exception when a non-existing URL segment is accessed),

The following blog templates have URL segments enabled:

  1. Blog Archives (blog-archives) [virtual parent of blog archives; virtual since no real children; works becaue of URL Segments]
  2. Blog Authors (blog-authors) [virtual parent of blog authors; can also display multiple authors]
  3. Blog Comments (List) (blog-comments) [virtual parent of blog comments; can also display multiple comments]
  4. Blog Posts (blog-posts) [parent of posts; can also display all posts]
  5. Blog Tag (blog-tag) [a single blog tag]

Cross-reference

 

Edited by kongondo
  • Like 1
Link to comment
Share on other sites

@teppo, @Ben Sayers,

Given my conversation with Ben in the blog module forum and given the correction made therein (?what?) and given Teppo's suspicion of URL Segments, I now wonder whether Ben's issue has to do with the term 'blog' at all. I suspect it is the 'posts' in the URL Segment since the posts templates utilises URL Segments as I listed above.

Edit: for clarification, Ben's correct address to the blog posts, is, f.ex. domain.com/blog/posts/some-post/ 

Edited by kongondo
Link to comment
Share on other sites

1 hour ago, kongondo said:

Given my conversation with Ben in the blog module forum and given the correction made therein (?what?) and given Teppo's suspicion of URL Segments, I now wonder whether Ben's issue has to do with the term 'blog' at all. I suspect it is the 'posts' in the URL Segment since the posts templates utilises URL Segments as I listed above.

Edit: for clarification, Ben's correct address to the blog posts, is, f.ex. domain.com/blog/posts/some-post/ 

My apologies for the confusion, Kongondo. I updated the post format in my original post on this forum. So if my issue is indeed related to the 'posts' URL segment, do you (or anyone else) have any idea how to resolve it? All suggestions are welcome, I've been fiddling with this for almost two weeks, lol.

Edit: I can confirm that it is the "posts" part of the URL that is causing the issue, I tried redirecting "blog/test/" and it redirected just fine but "blog/posts/test/" does not.

Edited by kongondo
Further explanation of issue
Link to comment
Share on other sites

1 hour ago, Ben Sayers said:

I can confirm that it is the "posts" part

I edited this to read "posts" NOT "post" to avoid further confusion 😃.

1 hour ago, Ben Sayers said:

do you (or anyone else) have any idea how to resolve it?

I think the key is in what @teppo stated above:

On 10/27/2019 at 8:42 AM, teppo said:

if a hook method attached to ProcessPageView::pageNotFound doesn't get executed at all for /blog/ URLs, this likely means one of two things: either there's no 404 exception when the user visits those URLs (i.e. the template of the page at /blog/ has URL segments enabled, but it isn't throwing 404 exception when a non-existing URL segment is accessed)

Your blog-posts template (file) is not throwing a 404 exception for the missing (deleted) posts. I am not sure whether manually throwing a 404 will resolved the issue but I am sure the other guys will have better knowledge of this. Meanwhile, please show us the contents of your blog-posts template file.

Edited by kongondo
Link to comment
Share on other sites

34 minutes ago, kongondo said:

Meanwhile, please show us the contents of your blog-posts template file.

Sure thing, here is my 'blog-posts' template file, it's identical to my 'blog' template file. 

<?php namespace ProcessWire;
	
  include('./_head.php'); // include header markup ?>
  
  <!-- Page title -->
  <section id="page-title">
    <div class="container-fluid">
      <div class="page-title">
        <?php echo "<h1>" . $page->get('headline|title') . "</h1>";?>
      </div>
      <div class="breadcrumb">
		<?php
		echo "<ul>";
		$parents = $page->parents;
		foreach($parents as $parent) {
			$url = $parent->url;
			echo "<li><a href='$url'>{$parent->title}</a></li>\n";
		}
		// show current / "we are here" page as well, but not as link: (last element)
		echo "<li>{$page->title}</li>\n";
		echo "</ul>"; ?>
      </div>
    </div>
  </section>
  <!-- end: Page title --> 
  
  <!-- Content -->
  <section id="page-content">
    <div class="container-fluid"> 
      <!-- post content --> 
	  <?php
		// Change options for pagination
		$options = array(
		  'numPageLinks' => 5,
		  'listMarkup' => "<ul class='pagination justify-content-center'>{out}</ul>",
		  'itemMarkup' => "<li class='page-item {class}'>{out}</li>",
		  'linkMarkup' => '<a href="{url}" class="page-link">{out}</a>',
		  'currentItemClass' => 'active',
		  'separatorItemLabel' => '...',
		  'separatorItemClass' => 'page-link',
		  'currentLinkMarkup' => '<a href="{url}" class="page-link">{out}</a>',
		  'nextItemLabel' => '<i class="fa fa-angle-right"></i>',
		  'nextItemClass' => '',
		  'previousItemLabel' => '<i class="fa fa-angle-left"></i>',
		  'previousItemClass' => '',
		  'lastItemClass' => '',
		);	
		$blogposts = $pages->find("template=blog-post, sort=-blog_date, limit=9");
		setlocale(LC_ALL,"en_US.UTF8");
		$pagination = $blogposts->renderPager($options);
	  ?>
      <?php if(count($blogposts)): ?>
      <!-- Blog -->
      <div id="blog" class="grid-layout post-3-columns m-b-30" data-item="post-item">
		  <?php
			foreach ($blogposts as $b) {
				if(count($b->blog_images)) {
					$firstimage = $b->blog_images->first();
					$thumb = $firstimage->width(640);
				}
				echo "<div class='post-item'>
				  <div class='post-item-wrap border shadow'>";
				if(count($b->blog_images)) {
				echo "<div class='post-image'><a href='{$b->url}'><img alt='{$b->title}' src='{$thumb->url}'></a></div>";}
				echo "<div class='post-item-description'> <span class='post-meta-date'><i class='fa fa-calendar-alt'></i>{$b->blog_date}</span> <span class='post-meta-comments'><a href='{$b->blog_author->url}'><i class='fa fa-user-circle'></i>{$b->blog_author->title}</a></span>
					  <h2><a href='{$b->url}'>{$b->title}</a></h2>
					  <p>{$b->summary}</p>
					  <a href='{$b->url}' class='item-link'>Read More <i class='fa fa-arrow-right'></i></a>
					</div>
				  </div>
				</div>";
			}			
		  ?>		  
      </div>
      <!-- end: Blog --> 
      <?php echo $pagination; ?>
	  <?php endif; ?>
      
    </div>
    <!-- end: post content --> 
    
  </section>
  <!-- end: Content --> 
  
	<?php include('./_foot.php'); // include footer markup ?>	

 

Link to comment
Share on other sites

On 10/25/2019 at 8:54 PM, Mike Rockett said:

@adrian Page identifiers were never intended to be used as part of a destination. These identifiers use the full, absolute URL of the page being identified. Perhaps destination selectors could come in handy here? Haven't ever tried it this way before, but I imagine redirecting subscribe/{all} to [[1495]]{all} (or [[1495]]/{all}} if trailing slashes are turned off) would work. Anything inside the square braces is passed to pages->get and replaced with page->url, which is why I believe this will work.

Thanks @Mike Rockett - using the page ID like that does work. This was the combo I needed:

image.png.2ff18b17783e740f4e3f7b656f50c502.png

Note that the first one showing "sign-up/" is from the selected page, not manually entered. With this, all seems to work as expected.

  • Like 1
Link to comment
Share on other sites

@Mike Rockett - I've come across an issue with the way that Jumplinks sanitizes the URL. I have partners linking in to the site with campaign info in the query string, but Jumplinks is removing the "?" so that:

mysite.com/subscribe/partner/?utm=123

becomes:

mysite.com/sign-up/partner/-utm-123 

which of course looks like a second urlsegment to PW and therefore breaks things.

Any chance of revising the sanitizer that makes that change please?

Link to comment
Share on other sites

3 minutes ago, Mike Rockett said:

@adrian I wonder if database->escape_string is playing a role here? I think I'm doing it differently in JL2, but that's nowhere near done in terms of a frontend. 🙈

I just removed all those calls and it doesn't seem to be coming from them as it didn't help.

Actually, those calls only seem to be in the import from csv logic, so I don't think they are relevant at all, are they?

Link to comment
Share on other sites

3 minutes ago, adrian said:

Thanks very much - let me know if you have any trouble reproducing.

Going to have to spin this up and see what's going on. Mind sharing your source/destination with me?

Just now, adrian said:

I just removed all those calls and it doesn't seem to be coming from them as it didn't help.

Sorry, I edited that post as you were replying

  • Like 1
Link to comment
Share on other sites

@adrian Ok so this seems to be the wildcard cleaner. Because {all} is the equivalent of .*, it includes the query string in this case and therefore cleans it like a normal wildcard. The only option for the time being is to disable cleaning of {all}, by changing it to {!all} in the destination. I know it's not perfect, but JL doesn't actually handle query strings very well – they should actually be handled separately somehow.

Edit: I'm actually going to see if I can update the cleaner to prevent query string character cleaning.

  • Like 1
Link to comment
Share on other sites

3 minutes ago, adrian said:

You're a legend - thank you - works perfectly!

You're welcome. JL2 (when I get there 🙈) will give some more control here. This case would be covered by subscribe/{path} --> @[1495]/{path}, and then there'd either be a {query} wildcard or an option on the jumplink itself to automatically carry it over.

  • Like 1
Link to comment
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
×
×
  • Create New...