Jump to content

horst

PW-Moderators
  • Posts

    4,077
  • Joined

  • Last visited

  • Days Won

    87

Everything posted by horst

  1. I think not a "special PW-function" but what's about radio buttons in your form with left - center - right and within form processing you crop the images west - center or east, according to the selected radio button?
  2. Hi, in the examples of pocketgrid it is to read that this should support n-th child for IE 6 - 8, but like I understand the code it only selects IE7 ?? I thought gte = "is greater then" and lte = "is lesser then". I'm wrong or right?
  3. +1 for $config->siteScripts and $config->siteStyles with absolute pathes / urls
  4. but if it has a single image in it, why do you try to select the ->first() ? I assume you have set the image field to allow only 1 image? Also, if you have set it proper to a single image field, it could be that you have a page without an uploaded image to that field. if($featured->Featured_Image) { echo "<img src=\"{$featured->Featured_Image->getThumb('thumbnail')}\" />"; } ------ Also my questions a post above was thought a bit different. I was trying to get you debug the output in your page, just above the line that raises the error. But I wasn't clear, so it doesn't . The error messages said that it isn't an object or the wrong object, so you can debug it to see what's going on. You expect it to be a cropimage field, therefore it should be an instance of type "FieldtypeCropImage". if($featured->Featured_Image->first() instanceof FieldtypeCropImage) { echo "\n<p>the Featured_Image->first() is a cropimage</p>\n"; } if($featured->Featured_Image instanceof FieldtypeCropImage) { echo "\n<p>the Featured_Image is a cropimage</p>\n"; } // imagefield is: FieldtypeImage Most collections in PW are based on WireArrays, so multiple images fields are too and you can look for that: // or checking for single vs multiple if($featured->Featured_Image instanceof WireArray) { echo "\n<p>it is multiple</p>\n"; } else { echo "\n<p>it is single</p>\n"; } You can also just dump a variable with var_dump($featured->Featured_Image->first()) to see what is in it, but that's mostly not very usefull in PW because objects in PW have way to many references to other objects so that var_dump results into very, very large outputs.
  5. if $featured->Featured_Image->first() isn't an object that has a method getThumb, so what is it actually? or lets have a look at one step before: what does $featured->Featured_Image hold? (an images array, a single image, nothing?)
  6. Sorry Tom, I have misunderstood or haven't answered clearly. My tip was regarding this comment I don't know nothing about that error with the usage on profile pages. My tip was only to let you know that if you like the stored crop rectangle coords per session, you can use it also permanent with installing PiM and the setting in config.php.
  7. @xorotle: has you set debug to true? (site/config.php -> $config->debug = true;) have you entries in your site/assets/logs/error.txt ? (after switching debug to true?)
  8. "Komodo Edit" (not Komodo IDE) is a free Editor (OSX, Win, Linux) that supports FTP-Remote editing too: http://komodoide.com/komodo-edit/
  9. Hi Tom, unfortunately not yet without hacking. The plan is, in a new fork of the Thumbnail module, to add the (optional) permanent storage directly into Thumbnails. If you want hide the options you can hack/edit the site/modules/Thumbnails/ProcessCropImage/ProcessCropImage2pim.css and set them as display none (#hd form label, #hd form select, #hd form button) ??
  10. @renobird: Do you also have installed PiM? Together with PiM installed, you can store the used crop rectangle coords permanent by just add this to your site/config.php $config->imageManipulatorOptions = array( 'thumbnailCoordsPermanent' => true );
  11. Haha, - to add one more, I want to point out that I really like to use the way it is done with Spex!
  12. @enricob: 1) You do not have to add an alternate template file on a per page basis, you only have to add it once for a newly created template. Don't know how many templates one need for a average site, - I seldom have used more than 10 or 15. 2) I think it isn't a good idea. For example, it is different if a page has a template that has no template file compared to pages that have a template which is assigned a template file. Those pages without a template file cannot be shown on the frontend (because there is no template file that specifies how to generate the output). Such pages have many usecases like for example toolpages etc., or trees and childpages that you need to define categories or tags or whatever. You don't want them accessible through HTTP.
  13. +1 A bit OT regarding the threadtitle but another great thing that one can use with ProcessWire is the Hannacode module. When fetching pages from an online resource and store them locally I want that links in the bodycontent point to the local resources if they are available. But which one is, will or should be locally stored isn't easy to determine when fetching the (first) pages is in progress. Therefore I installed Hannacode and store every a-href in the bodycontent as hannacode: [[source_url source_url=http://example.com/path/to/page.html]] The codesnippet that get invoked for every link: $p = $pages->get("template=elektronik, source_url=$source_url"); if(0<$p->id) { // page is locally available echo $p->url; } else { // page is only online available, add a css class to the tag that this can be shown in the page output echo $source_url . '" class="externLink'; } This way I can add or remove pages without breaking (locally) references in other pages. Summary: created an importer script, modified the renderNav function, added one Hannacode and some css styles = a nice and comfortable to use site!
  14. Yes, I have added three fields to the template: mainid, subid and tag. I use an array with a predefined structure that I use for adding pages via API: $struktur = array( 'grundlagen' => array( 'elektrotechnische-physik', 'stromkreisgesetze', 'elektrotechnische-chemie', 'wechselstrom-und-wechselspannung', 'signal-und-energiequellen', 'messtechnik', 'praxis' ), 'bauelemente' => array( 'lineare-und-nichtlineare-widerstaende', 'kapazitive-und-induktive-bauelemente', 'halbleiter', 'transistoren', 'integrierte-schaltungen', 'sonstige-bauelemente', 'praxis' ), 'schaltungstechnik' => array( 'grundschaltungen', 'transistorschaltungen', 'stabilisierungsschaltungen', 'anwendungen-mit-operationsverstaerker', 'praxis' ) ); Here a bit simplyfied the import process: foreach($struktur as $main => $subs) { $mainPage = $pages->get("/$main/"); // let out the check if the mainPage exists or need to be created here foreach($subs as $sub) { $subPage = $pages->get("parent=$mainPage, name=$sub");// let out the check if the subPage exists or need to be created here // ... execute code for fetching the urls for this subPage here ... foreach($urls as $url) { $dump = @file_get_contents($url, false, $context); if(!$dump) continue; // fetch or create this page $newPage = $subPage->child("source_url={$url}"); if(0==$newPage->id) { // create a new page $newPage = new Page(); $newPage->parent = $subPage; $newPage->source_url = $url; $newPage->tag = 'page'; // can be one out of main, sub, or page $newPage->mainid = $mainPage->id; // store main parent id $newPage->subid = $subPage->id; // store sub parent id ... (template, title, name, etc) $newPage->save(); } $assetsUrl = '/site/assets/files/' . $newPage->id . '/'; // ... parse and adjust the body content, store it into $newContent ... $newPage->of(false); $newPage->body = $newContent; $newPage->save(); wire('pages')->uncache($newPage); } } } This way i have all needed information in the contentpage itself. In my search template I use $selector = "title|body%=$q, tag=page, limit=$limit"; $matches = $pages->find($selector); $selection = array(); foreach($matches as $match) { $selection[$match->id] = $match->id; if(0<intval($match->mainid)) $selection[$match->mainid] = $match->mainid; // add involved mainPage to the ids if(0<intval($match->subid)) $selection[$match->subid] = $match->subid; // add involved subPage to the ids } In my case here this was all to do to get it working with the above posted renderNav4. Into the generated output of the renderNav4 I have added css classes: "<li class='main{$item->mainid} type{$item->tag}'>" I only need to lookup the ids of the three mainPages and add these lines to main.css: li.main2908 a, li.main2908 { color: #465E8A !important; } li.main2916 a, li.main2916 { color: #5B7D12 !important; } li.main2924 a, li.main2924 { color: #AB5D65 !important; } In the sidebar I display the list of the next higher level. It is a really nice and functional site what doesn't take much effort because of Ryans new minimalistic SiteProfile in dev-branch. I only had to manage the import and had to modify the renderNav function into two different behaviours. I love ProcessWire Screenshots:
  15. Hi reems, thanks! Yes what was needed was to collect the ids of the main- and sub- levels too. The above posted renderNav4 function need no changes then. Just passing an array with involved main-, sub- and page-ids to it works. The only thing I would do a bit different is to collect the ids in assoc key=>value arrays: // $myArray[] = $page->id; $myArray[$page->id] = $page->id; This way you don't get double or multiple entries (no need for calling array_unique), but much more important: you are able to check for existence of an id by calling if(isset($myArray[$id])) what is much, much faster than if(in_array($id, $myArray)) So, I think this only becomes important with huge arrays and a high amount of calls to the function.
  16. Hi reems, this sounds really good and I have tried it out. I use a slightly modified renderNav function from the current dev branch minimal site profile for that. But unfortunately the page ids of the main and sub pages are not within the matches of a search query. With this way to generate the sitemap / search results output it does not work. // $items always is the homepage // $matches is an array with key-values the same: $matches[id] = $id; function renderNav4($matches, $items, $maxDepth = 0, $fieldNames = '', $class = 'nav') { // if we were given a single Page rather than a group of them, we'll pretend they // gave us a group of them (a group/array of 1) if($items instanceof Page) $items = array($items); // $out is where we store the markup we are creating in this function $out = ''; // cycle through all the items foreach($items as $item) { if('site-map'==$item->name) continue; $show = isset($matches[$item->id]); // markup for the list item... // if current item is the same as the page being viewed, add a "current" class to it $out .= $show ? ($item->id == wire('page')->id ? "<li class='current'>" : "<li>") : ''; // markup for the link $out .= $show ? "<a href='$item->url'>$item->title</a>" : ''; // if there are extra field names specified, render markup for each one in a <div> // having a class name the same as the field name if($fieldNames) foreach(explode(' ', $fieldNames) as $fieldName) { $value = $item->get($fieldName); if($value) $out .= $show ? " <div class='$fieldName'>$value</div>" : ''; } // if the item has children and we're allowed to output tree navigation (maxDepth) // then call this same function again for the item's children if($item->hasChildren() && $maxDepth) { if($class == 'nav') $class = 'nav nav-tree'; $out .= renderNav4($matches, $item->children, $maxDepth-1, $fieldNames, $class); } // close the list item $out .= $show ? "</li>" : ''; } // if output was generated above, wrap it in a <ul> if($out) $out = "<ul class='$class'>$out</ul>"; // return the markup we generated above return $out; } Using it this way produces only a list of pages, not the hierarchical structure of the sitemap. I need the main and sub branches, but only where they contain at least one page in matches. Any other ideas or tips?
  17. On a little site I have a pagetree like: home main sub page page sub page main sub page sub page page main ... every page use the same template, every page has a tag field with a string shown as above (main, sub or page) The same structure is used for the navigation and sitemap on the frontend too. What I would like to achieve is the same presentation for search results. Therefor I need a results array ordered this way. Is it possible to cover this with the search selector only? The amount of total pages is less than 100 and ever would be less than 300 in the future too. The pages are fetched from a big german online electronic kompendium. I need the site to filter only the very basics from the online site which seems to hold many thousand pages. It is for local / private use only. (for my son as a searchable reference)
  18. As you define the sizes by yourself when setting up a field, you may add this manually into the template code where needed. But you can also get it programmatically like interrobang has done it here: https://processwire.com/talk/topic/4437-delete-orphaned-filesimages-from-siteassetsfiles/#entry43750 search for this lines: $crops = $field->getArray(); $crops = $crops['thumbSetting']; $crops_a = explode("\n", $crops); // ie. thumbname,200,200 (name,width,height)
  19. this is wrong, imagesizeroptions apply to _all_ images that imagesizer handles. => https://processwire.com/talk/topic/6848-recognising-image-orientation-on-upload/
  20. also the link to API needs change to DOCS
  21. @reems: do you know that you can set a maximum length for images in the images fields? admin => setup => fields => (click to edit your images field) => tab input :: look for "Max Image Dimensions"
  22. You should try to have major version in sync, PHP should be both 5.3 or 5.4 Also the minimum requirements for PW are: (not 5.0.10 or 5.0.8) regarding 5.0.8 see also: https://processwire.com/talk/topic/7034-check-for-new-modules-causes-internal-server-error/
×
×
  • Create New...