Jump to content
loukote

$pages->get finds a multi-language page only in some languages

Recommended Posts

Dear forum members,

I'm facing the following issue: on a website with multi-language support, there is a template having a multi-language title, ML body and few more fields. The "parent" template looks for pages (news items) using a selector:

$pages->get("template=news_entry, sort=-created, Publish_in*=main")

The selector does not change with the language.

The page (and it's parent) have the multi-language support enabled. The pages (parent getting the pages using the above selector and the "news entry") have the cache disabled and the languages active.

Now the problem: a test news entry shows up (selector finds a page) in the default language and one other, it does not show up in two others. The one non-default in which it shows up was installed later.

I went through the documentation but I'm blank on what needs to be checked. Would you have any ideas on what needs to be corrected or checked? I would really appreciate!

Share this post


Link to post
Share on other sites

Is Page - Settings tab - Active checkbox checked after page names?

Share this post


Link to post
Share on other sites
1 minute ago, tpr said:

Is Page - Settings tab - Active checkbox checked after page names?

Yes, it is on both - the item and the parent.

Share this post


Link to post
Share on other sites

$pages->get gets only one page, try find() instead.

Also, get() ignores published state which is perhaps not what you want.

  • Like 3

Share this post


Link to post
Share on other sites
On 9/3/2018 at 10:51 PM, tpr said:

Also, get() ignores published state which is perhaps not what you want.

Sorry, the template used find(), not get(). So it's something else.

PW is 3.0.110, upgraded to PW 3.0.111 results in the same behavior.

Standard pages work fine. Only the news-list page where subpage are pulled through the api (first $pages->find(), then foreach() ) behaves this way (counts/returns a number of items for some languages and none for others). This is the case whether the field (title, body) is translated or not.

is there a way in the api to check whether a page language is active?

Share this post


Link to post
Share on other sites

Use Tracy debugger and dump to see th3 full object. I guess you should post the template file content too to check that also (with the exact data to avoid misunderstandings like the previous get vs find).

Share this post


Link to post
Share on other sites

@tpr , thanks for offering help!

Which full object? bd($page); ? I'm new to Tracy debugger and do not know how to export the result in a manner that would be readable.

The template is as follows:

<?php namespace ProcessWire;

// basic-page.php template file

// Primary content is the page's body copy
$content = $page->body;

// List all news
$section_title  = $pages->get('id='.$section_name_id)->title;
$limit_news_to_subsites_string = ", Publish_in*=".$section_title;

$selector ="template=news_entry, sort=-created" . $limit_news_to_subsites_string;
$items = $pages->find( $selector );

$item_nr = 0;
foreach($items as $item){
	$item_nr++;
	
	$news_entry = renderNews($item, $item_nr, true, false, 'full', $user);
	
	// Output this piece of news 
	$content .= "<div class='news_entry'>".$news_entry."</div>\n";
}

When the language is either French or German, the counter $item_nr==0, for English and Luxembourgish it is ==1 or more, depending on the number of test news items.

I tried to activate and deactivate the languages on news/item pages (items to be displayed) and the news page itself (the one that should list them all). No change.

The only difference i see is on the admin panel: the languages that return news items do have a drag-and-drop icon and text (lb), not those that return zero news items (de). But this likelu has something to do with the language packs: for FR and DE there is one, for LB there is none.

image.thumb.png.a7c3a38b41311953264825d6ccab3e74.png

image.thumb.png.cc9593845f7bbd9dbd49ac4bd64e33a0.png

Share this post


Link to post
Share on other sites

Just bd() what you need to see, eg.

bd($section_title);
bd($selector);
bd($items);

and examine what the cause could be.

My guess is that there's something with the $section_title, or some news page are still inactive in some languages (de, fr).

  • Like 1

Share this post


Link to post
Share on other sites

When the page is displayed directly via its own template, languages switch as expected, that is correct title and body are displayed. Only when accessing them through

$pages->find( $selector )

the language switching somehow fails. So nothing to see with

bd($page->title);

On the other hand, Tracy (discovering: it's great!) shows the result of

bd($items);

image.thumb.png.9a1e3deb66af9053467517332b699960.png

image.png.421a9e1332b05ab767d5a08c1b016a5a.png

(Somehow i do not see a better way to dump it here.)

The URL is there but i still need to understand how to display the body and title. So far so good, the family is calling...

Share this post


Link to post
Share on other sites

Is section title translated in your selector? Perhaps its in the default lang all the time. Anyway, you're on the right way, keep searching 🙂

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.

×
×
  • Create New...