mike62

[RESOLVED] Echo a field from another page

Recommended Posts

I'm trying to echo a field from another page, in my footer. I have a Website Settings page (id 1006) with several fields for general site settings, like store hours (field is named store_hours). In the footer, I have this:

<?php $settingsPage = $pages->get(1006); 
	echo $settingsPage->store_hours;
?>

Shouldn't that output the contents of that field? Right now it's printing a "0" (zero) on the page.

Elsewhere in the same footer template file, I have this code and it works fine:

<?php $homepage = $pages->get(1); 
	echo $homepage->body;
?>

Does it have anything to do with the fact that the field is organized into one of these tabs, at the top of the page editor?

(disclaimer: I'm new to PW, and have inherited this site from another developer; that's why I don't know how or why some of this stuff is set up the way it is).

Thanks!

Screen Shot 2017-11-27 at 12.51.31 PM.png

Share this post


Link to post
Share on other sites

Hm, it should work that way and has nothing to do with your tabs.

Check the id (1006) again, maybe it's just a typo :) Is that page unpublished maybe?

 

Share this post


Link to post
Share on other sites
18 minutes ago, maxf5 said:

Is that page unpublished maybe?

That won't matter because he is using $pages->get() rather than $pages->find()

I think you do need to confirm 1006 and if that is correct, try $settingsPage->id to make sure that works - that way you can narrow down if it's a problem with the page or the store_hours field.

  • Like 1

Share this post


Link to post
Share on other sites
Just now, adrian said:

That won't matter because he is using $pages->get() rather than $pages->find()

Actually, I do wonder about that - what version of PW is this? Maybe the behavior of get has changed since the early days, but I don't think so.

Share this post


Link to post
Share on other sites

It's PW v 2.3. I checked the publish settings, and it was set to "Hidden: Excluded from lists and searches". I tried unchecking that box but I still get a zero. The id for the page is right in the URL when you're editing the page, right?

This is the URL when I edit that page:

/admin/page/edit/?id=1006&s=1 

Yeah, it's really weird, because like I said, I'm already using the exact same technique to echo a field from the homepage, but it's not working for this other page. :S

Share this post


Link to post
Share on other sites

Yeah, you have the page id correct. Did you try echoing: $settingsPage->id like I suggested? If that works, check other fields on that page and see if somehow it's just the store_hours field.

  • Like 3

Share this post


Link to post
Share on other sites

Thanks @adrian! That helped me track the problem down. Turns out there are two fields on this site for store hours, for some reason, and the one I needed was store_hours_content, not store_hours. :S

I wish there was a way to see the field name when you're editing the page itself, rather than having to dig through the Templates and Fields areas of the backend.

Anyway, chalk this one up to user error. :/

Share this post


Link to post
Share on other sites
9 minutes ago, mike62 said:

I wish there was a way to see the field name when you're editing the page itself

Two options:

1) Admin On Steroids gives a tooltip to show field names and link to edit them:

5a1efc42b74e3_ScreenShot2017-11-29at10_27_33AM.png.ce86d4302fac4927387612c8673f1633.png

 

2) Tracy shows a list of fields (and their values and settings for the page being edited. This is available from the Request Info Panel

5a1efc8988700_ScreenShot2017-11-29at10_29_12AM.png.b9b5f669cfb400e690efaa010f9e3299.png

  • Like 2

Share this post


Link to post
Share on other sites

Cool thanks! I also just discovered that I could have just been using: 

echo $settings->store_hours_content;

without even needing to use

$pages->get(1006);

Is there some way that the Website Settings page (1006) has been defined as some kind of global $settings variable?

Share this post


Link to post
Share on other sites
4 minutes ago, mike62 said:

Is there some way that the Website Settings page (1006) has been defined as some kind of global $settings variable?

Yep!

Obviously you can search the code files under site, but also if you turn on the Template Resources panel in Tracy Debugger it will show you where it was defined.

Just now, kongondo said:

Really??...on PW 2.3? :P

Yeah, sorry - good point!

@mike62 - you really should upgrade this site!

Share this post


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

I tried upgrading, unfortunately. See here if you want the whole sordid story.

Yeah Mike. I read that a while back :).

Share this post


Link to post
Share on other sites

I see - I think I'd still persist with fixing those spex issues - I bet it won't be too difficult, but I obviously won't mention it again :)

Share this post


Link to post
Share on other sites

I'm already well past the budgeted time on this project, and firmly in Good Enough, Move On territory. :) 

Share this post


Link to post
Share on other sites
1 hour ago, mike62 said:

I wish there was a way to see the field name when you're editing the page itself

Another option: set $config->debug = true in /site/config.php (which is a good idea in general while developing a site) and then hover the inputfield collapse/expand icon in Page Edit.

2017-11-30_090003.png.2128d1215faf5cc0739b48cbb9263230.png

  • Like 1

Share this post


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 Sten
      Hi,
      I have a lot of difficulties with getting a field value.
      First I created a template, inside I created several fields
      two fields are a dropdown select box So I have a value and a label for each line.
      Then I want to get the field value in _init.php or in the template to display it. How can I get the value of a field for the page ? I need to understand the flow through which data goes.
      Could someone help me ?
      Thank you
       
       
       
    • By louisstephens
      So this is more or less just a question regarding best practices, and how to actually achieve this. I have an internal tool I built awhile ago that has just gotten very "trashed". The naming conventions are all out of whack due to trying to get something completed, and pages are just everywhere. The fields got really out of hand as well, but I believe I have found a much cleaner field structure with the Repeater Matrix and a few other ProFields.  I decided recently to rewrite the template structure and the fields from scratch to keep everything nice and neat, but then it hit me that I would need to move all the previous data over and populate the new fields etc.
      The current tree looks something like:
      Group Title - Section A (template "section") - Category One (template "category") - Category Two (template "category") - Section B (template "section") - Category One (template "category") - Category Two (template "category") Etc etc... The structure is pretty good, and I am thinking of keeping it as it serves my purpose. However, I now have about 140 Sections with child pages that I would hopefully like to move to different templates, as well as changing the child templates/mapping data to the new fields. The only fields I need to worry about are a few textareas, text fields, options field,  as well as 1 image filed.
      I guess my real question is, what is the best way to go about this "migration" via the api while keeping the parent/child structure. It would be ok to leave it as is and chip away at it if I were the only one using it, but unfortunately that is not the case. 
      I guess one approach would be to copy over the entire structure and make the move to the new templates/fields. Once we have verified all the data/templates are correct, we could remove the old structure and possibly rename the new to mirror the old. However, this might just be too complicated.
    • By chcs
      After running this code in my module's __install() the template_id is not set. Any ideas why?  (The export contents from the template created and the one that I built with Admin are the same. Both exports have the template_id is set to mm_state. When I go to edit the field in Admin, the template is not showing on the Input tab and it doesn't show the template title on a page using the template that uses this field. Using processwire 3.0.98)

      // mm_state
      $field = $this->fields->get('mm_state');
      if (!@$field->id) $field = new Field();
      $field->type = $this->modules->get("FieldtypePage");
      $field->name = 'mm_state';
      $field->label = 'State';
      $field->derefAsPage = 2;
      $field->inputfield = "InputfieldSelect";
      $this->fields->save($field);
      $field->labelFieldName = 'title';
      $field->template_id = 'mm_state';
      $field->columnWidth = 100;
      $field->required = true;
      $this->fields->save($field);
    • By louisstephens
      So I have a project where multiple pages are sending POST data to 1 single template page.  All was working well (well, at least with one ajax post), but now I have hit a stumbling block. I figured  the "best" way to handle the request were to use url segments and then use the following in the status page:
      if ($config->ajax && $input->urlSegment1 == 'add-bookmark') { // some code here } However, this doesnt seem to really work (as I assume the the request isnt being posted to /status/ but rather to /status/add-bookmark/). What is the best way to actually handle this?