Jump to content

John W.

Members
  • Content Count

    60
  • Joined

  • Last visited

Community Reputation

19 Good

About John W.

  • Rank
    Full Member
  • Birthday June 30

Profile Information

  • Gender
    Not Telling
  • Location
    Florida, USA

Recent Profile Visitors

1,684 profile views
  1. I think I found a quick solution: # cycles through all the current $page parents then # returns the parent that is #x in the list # $page is the current page, $parentNumber is the # parent to find and return in the tree function getParent($page, $parentNumber) { $cnt=0; foreach($page->parents() as $p) { $cnt++; if($cnt == $parentNumber) { return $p; } } return false; } #pass the current $page and return its third parent $parentPage = getParent($page,3); echo $parentPage->title;
  2. Yeah, tried that, it pulls the first child under DEPARTMENTS This doesn't work when you have several departments such as DEPARTMENTS HUMAN RESOURCES About HR Job Listings Job 1 Job 2 ADMINISTRATION About Administration EMERGENCY OPERATIONS About Emergency Operations In the case above, your suggestion would always return "Human Resources"
  3. Working on a project where I have different categories of Departments, under departments I have Offices, and each office has multiple pages. DEPARTMENTS HUMAN RESOURCES About Human Resources Job Listings job 1 details page job 2 details page ADMINISTRATION About Administration Meet the Administrator ----------------------------- stored in HUMAN RESOURCES is a background image and title of the department. Instead of creating a background image for each office page (and it's sub pages like job 1 details page), I'm using the background image stored in HUMAN RESOURCES for all the child pages. I'm familiar with using $page->rootParent, however, this will return DEPARTMENTS rather than the office, e.g. HUMAN RESOURCES that each sub page belongs to. I thought about using a recursive function to traverse from the current page, when it reaches the template "office". Basically, if I'm in job 1 details page, it would traverse back up the tree until it reaches "office" template, such as "HUMAN RESOURCES". Has anyone done something similar, but, using a built in method that I'm missing? Thanks.
  4. I don't have a php template for documents. The non-php template, for documents just holds a title, summary and has pdf attachments available for download. Therefor, when /documents/ does a query, it finds all the "document" templates and lists them with a title, summary, and links to either view or download a pdf. See this screenshot: /documents/ simply does a list like this where visitors can see a date, title, summary and download or view pdf files. the information for each entry is a php-less template with date, title, summary and a file-type pdf field for attaching the pdf.
  5. Yup, that is what I'm doing. However, the trouble is I'm using a Page Reference field in another template, which creates a link like /documents/document-category/nameofdocument Of course, it throws a 404, since "nameofdocument" doesn't exist. So, what I did, for "nameofdocument", I created a php file for that template that redirects to /documents/results/document-category/. Since /documents/results/ doesn't have a template it just treats results/ like a url segment. 😉
  6. Yeah, I understand that. I had to create a page for the document-name, simple php file that redirects to documents/results/human-resources/ my documents.php then pulls the 3rd url segment and uses that for my $pages-find() query to filter results It works. Just figured there might be another way.
  7. Hi, I've set up a structure like so: these are the templates documents -> documents_category -> documents_document Basically, when someone goes to /documents/ it creates a listbox of categories and the page then lists all the documents_document in that documents_category. In my listbox, I have the url value set to /documents/document_category for instance /documents/human-resources/ would list all the documents contained under human-resource. Herein is the problem, I just want to use the human-resources as a url parameter to pass to /documents/ rather than processwire trying to load an actual page at /documents/human-resources/documentname Right now, it goes to /documents/human-resources/documentname/ Is there a way to set processwire to treat human-resources as a url parameter and not attempt to load the child page /documentname/? Note, I added a path like /documents/results/document-category/ which works, however, I need this to work in the back-end when using a page select field. The only solution I could think of was creating a documents_category.php file that takes the url, /documents/document-category/ and changes it to /documents/results/document-category/ then does a session redirect. Using this a page select would go to /documents/document/category/ which inserts the "/results/" segment and then redirects to /documents/results/category-name Thanks!
  8. Strange, My install of Processwire on my development system is showing version 3.0.132 (shown in blue/white theme), however, on my server side shows version 3.0.123 (current) (green/brown theme)? I use the ProcessWireUpgrade module, and on the local and server side shows the same version. Anyone have ideas why? Local Machine Server Side
  9. Would it be possible to add a the title tag to the iframe in order to improve accessibility? for instance <iframe title="A welcome from our CEO" ... thanks!
  10. This was on old post. Actually, what I do is fresh install processwire on the server. When I get ready to upload my project, I dump my local mySQL database, switch to the online site where I drop tables and import the database. After that, I uncomment about 3 lines of code in my index.php file that changes the processwire admin password in the database. From there, I just login and also change the passwords for any other roles that my be set up. Ryan pointed me to the info about setting the passwords via the PW api. In the past I used phpMyAdmin to dump out the database, now I use the dbbackup() module, save the backup file, then switch to processwire on the server and use dbbackup() to import the dump.
  11. This is really a general question about managing processwire projects located on a remote development server and syncing changes with git. So, I have a project in my templates folder on my mac. I run Ubuntu on a VM that monitors the shared mac folder with grunt, as I save changes in Sublime on the mac, it kicks off grunt (grunt, npm, nodejs etc, is installed on the Ubuntu VM) to compile my SASS, etc in the templates folder on the mac. Hope I didn't lose you there. Now, I want to be able to edit my code on my desktop, laptop from any location. So, I figure I would set up an Ubuntu install on development server, something like Digital Ocean, install npm, nodejs, grunt, etc (just like I did with the VM). I guess what it comes down to, if I edit my code on my mac, it would push the save files out to Digital Ocean, where grunt is running, and grunt would kick off my SASS compiler, etc. Then if I jump onto my laptop from a remote location it would sync back a copy of my templates folder to the laptop. So, if I edit code on my mac or laptop, they will push the changes to the remote Ubuntu server where grunt runs to compile my sass or compress But, it also syncs back changes to both the laptop and mac. I'm not really sure if this is the best approach. If you have any input on using something like git to sync your templates folder between a server that watches and compiles changes and for instance a desktop computer and laptop, I'd really like to hear it. Please don't tell me to learn emacs, lol. Thanks for your time and input. john w.
  12. I have to set this flag for clients on Satellite internet connections as well. Just a heads up.
  13. Look around for a while, but, no luck. Using the built in pagination, renderPager(); With pagination, is there a way to append a named anchor to the renderPager() page number? for instance: instead of the default somesite.come/inventory/page2 but, add an anchor... somesite.com/inventory/page2#myanchor or Or, would I have to put the anchor name into a segment, get the name, then use javascript to jump to the anchor? such as somesite.com/inventory/myanchor/page2 thanks
  14. SYNOPSIS A little guide to generating an sitemap.xml using (I believe) a script Ryan originally wrote with the addition of being able to optionally exclude child pages from being output in the sitemap.xml file. I was looking back on a small project today where I was using a php script to generate an xml file, I believe the original was written by Ryan. Anyway, I needed a quick fix for the script to allow me to optionally exclude children of pages from being included in the sitemap.xml output. OVERVIEW A good example of this is a site where if you visit /minutes/ a page displays a list of board meetings which includes a title, date, description and link to download the .pdf file. I have a template called minutes and a template called minutes-document. The first page, minutes, when loaded via /minutes/ simply grabs all of its child pages and outputs the name, description and actual path of an uploaded .pdf file for a visitor to download. In my back-end I have the template MINUTES and MINUTES-DOCUMENT. Thus: So, basically, their employee can login, hover over minutes, click new, then create a new (child) record and name it the date of the meeting e.g. June 3rd, 2016 : --------------------------- OPTIONALLY EXCLUDING CHILDREN - SETUP Outputting the sitemap.xml and optionally excluding children that belong to a template. The setup of the original script is as follows: 1. Save the file to the templates folder as sitemap.xml.php 2. Create a template called sitemap-xml and use the sitemap.xml.php file. 3. Create a page called sitemap.xml using the sitemap-xml template Now, with that done you will need to make only a couple of slight modifications that will allow the script to exclude children of a template from output to the sitemap.xml 1. Create a new checkbox field and name it: sitemap_exclude_children 2. Add the field to a template that you want to control whether the children are included/excluded from the sitemap. In my example I added it to my "minutes" template. 3. Next, go to a page that uses a template with the field you added above. In my case, "MINUTES" 4. Enable the checkbox to exclude children, leave it unchecked to include children. For example, in my MINUTES page I enabled the checkbox and now when /sitemap.xml is loaded the children for the MINUTES do not appear in the file. A SIMPLE CONDITIONAL TO CHECK THE "sitemap_exclude_children" VALUE This was a pretty easy modification to an existing script, adding only one line. I just figure there may be others out there using this script with the same needs. I simply inserted the if condition as the first line in the function: function renderSitemapChildren(Page $page) { if($page->sitemap_exclude_children) return ""; ... ... ... THE FULL SCRIPT WITH MODIFICATION <?php /** * ProcessWire Template to power a sitemap.xml * * 1. Copy this file to /site/templates/sitemap-xml.php * 2. Add the new template from the admin. * Under the "URLs" section, set it to NOT use trailing slashes. * 3. Create a new page at the root level, use your sitemap-xml template * and name the page "sitemap.xml". * * Note: hidden pages (and their children) are excluded from the sitemap. * If you have hidden pages that you want to be included, you can do so * by specifying the ID or path to them in an array sent to the * renderSiteMapXML() method at the bottom of this file. For instance: * * echo renderSiteMapXML(array('/hidden/page/', '/another/hidden/page/')); * * patch to prevent pages from including children in the sitemap when a field is checked / johnwarrenllc.com * 1. create a checkbox field named sitemap_exclude_children * 2. add the field to the parent template(s) you plan to use * 3. when a new page is create with this template, checking the field will prevent its children from being included in the sitemap.xml output */ function renderSitemapPage(Page $page) { return "\n<url>" . "\n\t<loc>" . $page->httpUrl . "</loc>" . "\n\t<lastmod>" . date("Y-m-d", $page->modified) . "</lastmod>" . "\n</url>"; } function renderSitemapChildren(Page $page) { if($page->sitemap_exclude_children) return ""; /* Aded to exclude CHILDREN if field is checked */ $out = ''; $newParents = new PageArray(); $children = $page->children; foreach($children as $child) { $out .= renderSitemapPage($child); if($child->numChildren) $newParents->add($child); else wire('pages')->uncache($child); } foreach($newParents as $newParent) { $out .= renderSitemapChildren($newParent); wire('pages')->uncache($newParent); } return $out; } function renderSitemapXML(array $paths = array()) { $out = '<?xml version="1.0" encoding="UTF-8"?>' . "\n" . '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; array_unshift($paths, '/'); // prepend homepage foreach($paths as $path) { $page = wire('pages')->get($path); if(!$page->id) continue; $out .= renderSitemapPage($page); if($page->numChildren) { $out .= renderSitemapChildren($page); } } $out .= "\n</urlset>"; return $out; } header("Content-Type: text/xml"); echo renderSitemapXML(); // Example: echo renderSitemapXML(array('/hidden/page/')); In conclusion, I have used a couple different processwire sitemap generating modules. But for my needs, the above script is fast and easy to setup/modify. - Thanks
×
×
  • Create New...