Jump to content

Jumplinks


Mike Rockett

Recommended Posts

  On 10/26/2019 at 9:26 PM, 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/.

Expand  

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

  On 10/27/2019 at 8:42 AM, 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? ?

Expand  

 

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

module itself has some hook that prevents this from working.

Expand  

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)

 

  On 10/27/2019 at 8:42 AM, 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),

Expand  

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

  On 10/28/2019 at 1:35 PM, 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/ 

Expand  

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

  On 10/28/2019 at 2:04 PM, Ben Sayers said:

I can confirm that it is the "posts" part

Expand  

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

  On 10/28/2019 at 2:04 PM, Ben Sayers said:

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

Expand  

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)

Expand  

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

  On 10/28/2019 at 3:10 PM, kongondo said:

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

Expand  

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/26/2019 at 3:54 AM, 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.

Expand  

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

  On 11/6/2019 at 3:54 PM, 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. ?

Expand  

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

  On 11/6/2019 at 3:54 PM, adrian said:

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

Expand  

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

  On 11/6/2019 at 3:58 PM, adrian said:

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

Expand  

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

  On 11/6/2019 at 4:30 PM, adrian said:

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

Expand  

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

  On 11/8/2019 at 1:29 AM, Ben Sayers said:

Hi @kongondo, did you have a chance to review my blog-posts template above?

Expand  

Hi @Ben Sayers. Actually, yes, I have. I was to write something earlier this week but didn't get time to get to it. I have two suggestions. Could I please get back to you here over the weekend? Thanks.

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