Jump to content

horst

PW-Moderators
  • Posts

    3,870
  • Joined

  • Last visited

  • Days Won

    84

horst last won the day on July 4

horst had the most liked content!

About horst

  • Birthday 11/05/1955

Contact Methods

  • Website URL
    https://nogajski.de/

Profile Information

  • Gender
    Male
  • Location
    Aachen, Germany
  • Interests
    Photography; PHP, HTML, CSS (SASS,LESS), JS;

Recent Profile Visitors

34,800 profile views

horst's Achievements

Hero Member

Hero Member (6/6)

5.6k

Reputation

53

Community Answers

  1. According to the specs it should work like this (not tested) $results = $pages->find("title~=word1|word2|word3, title~=word4"); title=x, title=y is AND AND selectors: matching more than one value in the same field There will be instances where you need to say that a specific field matches more than one selector. This is simple, just specify all the conditions you need to match as separate selectors in the same string. For example: height>500, height<=1000 This AND selector matches all pages that have a "height" field greater than 500, and less than or equal to 1000. title=a|b|c, title=y should be the right combination https://processwire.com/docs/selectors/#and-selectors
  2. There seems to be NO (functional) Github link. For me the link opens the demo again. ??
  3. +1001 (for permanent visible reputation count and for individual member titles like: captain earth, manager of expectations, ... etc.) πŸ‘πŸ˜Š
  4. You should inspect what the bots tried to find. Maybe this will shed some light? You can use the jumplinks module for this, for example.
  5. Have you checked write access rights for parent, itself and children? Are all proper set? (Should be, even if it exist)
  6. I think it can be done with language alternate fields.
  7. Hey, you are using mediamanager and your tweaks have changed that the item passed into the function isn't a pageimage. Maybe a mediamanager object or a url string. I'm on mobile ATM, I'll come back to you. πŸ˜€
  8. Scope? When in the template file are you in Namespace\Processwire Have you tried to call it with a backslash in front? new \mysqli ... ? EDIT: Yes it is the missing backslash. (downloaded and looked into your php file) πŸ™‚
  9. Second Episode: "How can I add a watermark to all pageimages of a site?" first episode "Tutorial how to add a site wide optional watermarking method to all pageimages" second episode "Second Episode: "How can I add a watermark to all pageimages of a site?"" In the first episode we created a function that adds a watermark overlay to our original images. This function was hooked via the name "wm" to the pageimage object. We positioned a big centralized overlay to the original images. This suites right if you or your customer will not use cropped portions of the images somewhere down in the site. So, given the setup of the first episode is fine for a sites images concept, one can add a simple security layer to protect the original (unwatermarked) images. (Read on here how to secure the original images and how to keep them accessible / viewable in the admin for logged in users.) So in the second episode we want to support sites that need a more individual handling of images, including different output sizes and different cropped parts from an original image. Also we want to show a watermark in the bottom right corner in a 200px width, regardless of the width of the image variation. 1) Setup our site with a new overlay image 1.1) Create a new PNG image of 400 px width and 140 px height. Give it a half transparent background-color (40 - 60 percent opacity) and add some none transparent text over it. The text should be more then in the double size as you want to see it in the output on your site. For example like this one: 1.2) Upload it into the centralized image field (called setting_watermark in the previous episode) 2) Lets update our watermark function in site/ready.php 2.1) We now cannot any longer watermark the original images at first, because we don't know the exact final output dimensions and also not the final (maybe cropped) parts of the variations. Therefore we will work with the pageimage objects as usual and add our call to the watermark method as LAST action to each pageimage that should get a watermark overlay. $image = $page->images->first(); $variation = $image->crop('some settings here')->width(800)->wm(); ?> <img src='<?=$variation->url?>' alt='<?=$variation->description?>' /> So we will rewrite our function to suite our new needs. The first part can be taken mainly unchanged from the first episode: /** * Example Pageimage Hook for watermarking functionality, * adds a new method to Pageimage objetcs named wm. * Used in a small tutorial series in the ProcessWire forums * https://processwire.com/talk/topic/25752-tutorial-how-to-add-a-site-wide-optional-watermarking-method-to-all-pageimages/ * * @version 0.0.2 * */ $this->addHook('Pageimage::wm', function(HookEvent $event) { // get the image out of the event object $finalImage = $event->object; // this is no longer the $originalImage from episode 1 !! // access the field of the transparent watermark overlay image in a robust way, // regardless if it is set to 1 image or multiple images, and if it has changed // in this regard since we wrote this hook function $watermarkImages = wire()->pages->get('id=1')->getUnformatted('setting_watermark'); // check if the imagefield exists and it at least contain one image, than fetch it if(!$watermarkImages || 0 == count($watermarkImages)) { // return the unmodified original image to do not break our front end site $event->return = $finalImage; // inform the admin about the missing watermark overlay, (or do something other useful) wireMail('admin@example.com', 'noreply@example.com', 'MISSING SITEWIDE WATERMARK OVERLAY IMAGE'); wireLog('errors', 'MISSING SITEWIDE WATERMARK OVERLAY IMAGE'); // stop further execution return; } 2.2) Now lets have a short stop and think over. What do we want to achieve? We want create watermarked image variations and protect the unwatermarked images. Unwatermarked images are the original images and the intermediate variations that are created before we add an overlay to them. So in this situation, when we would following the regular image processing chain, we would create a variation with the resized and / or cropped version and after that, a watermarked variation, that we want to send to the browsers: original image: basename.jpg intermediate: basename.800x0.jpg watermarked: basename.800x0.-pim2-wm.jpg This would let all intermediate images unsafe in public scope, for everyone who knows a bit about the PW image processing routines. So the best solution would be to create the intermediate variations, watermark them and restore with the intermediate filename, not a filename that reflects that different processing step. This sounds fine, and indeed it is, with only one thing that we have to solve later: How can we detect if the current version is a watermarked (final) variation, or a unwatermarked "real" intermediate variation? 2.3) Following we rewrite the function from the first episode. First we have to check the incoming image, mainly its dimensions and if fits fine with the watermark sizes: // as we will overwrite this image with a watermarked version, // we have to make sure that this really is a variation and NOT an original image $isOriginal = null == $finalImage->getOriginal(); if($isOriginal) { // throw an exception, as this must be a bug in our code throw new WireException('Called a watermark method for final variation images on a original image!'); return; } // inspect the given image $ii = new ImageInspector(); $info = (object) $ii->inspect($finalImage->filename)['info']; // our preferred watermark width is 200px, so lets check if it fits into the variation if(200 >= $info->width) { // does not fit, is it a portrait oriented image with more then 300 px height? if(200 < $info->height) { // ok, we have to rotate our watermark -90 degree to make it fit to the bottom right $pngAlphaImage = $watermarkImages->first()->width(200)->pim2Load('rot270')->rotate(270)->pimSave(); } else { // the variation is to small for useful watermarking, we will leave and output it as is $event->return = $finalImage; return; } } else { // the width fits, so get a watermark image of 200px $pngAlphaImage = $watermarkImages->first()->width(200); } // now lets apply the watermark to our final variation, // this has to be done a bit different than we have done in the first episode. // The difference is, that we previously created another intermediate variation. // Now we want to avoid this, as it would make our watermarking processing nearly useless // in regard of protecting the unwatermarked images // we invoke the Pageimage Manipulator in a way that let us "overwrite" the loaded image, // what is not possible within its default processing $im = new \PageImageManipulator02(); $im = $im->imLoad($finalImage->filename, ['targetFilename' => $finalImage->filename])->setTargetFilename($finalImage->filename); $filename = $im->watermarkLogo($pngAlphaImage, 'SE', 0)->save(); $success = $finalImage->filename == $filename; // the imLoad()->save() process returns the filename of the processed image on success // $watermarkedImage = $finalImage; // this just should visualize what has happen in the black box :-) // With the previous episode, we had to return the watermarked variation and therefore had to replace the event object with it: // $event->return = $watermarkedImage; // But here, in fact we have overwritten the discfile that belongs to our incoming image object, // so there is no NEW image object that we have to change with the initial one! $event->return = $finalImage; }); 2.4) So, now we nearly have all together, but not how we can detect if a intermediate variation already has become a watermarked (final) version. Therefore the watermarking process is constantly executed again, with every view call now! So, what options are available to store the variations state for read / write in the processing chain? Into the DB? (has to be implemented first, and has to be cleared whenever an image and or its variations gets removed from the system) Into a sidecar file? (has to be implemented first, and also has to be cleared whenever an image and or its variations gets removed from the system) Into the variation file itself? (can be done via IPTC-data, but only for JPEGs) We also have since version 3.0.164 the possibility to store additional information for images & files into the DB. But this is only useful for the original image (or the complete group of original image and all its variation files), and not for individual single variation files. For this example we will go with the IPTC-data and take a simple helper class, that encapsulates this processes for us. For simplicity in this example, we also copy its code into the ready.php file. 2.5) Now we add the tracking into our function from above: ... // as we will overwrite this image with a watermarked version, // we have to make sure that this really is a variation and NOT an original image $isOriginal = null == $finalImage->getOriginal(); if($isOriginal) { // throw an exception, as this must be a bug in our code throw new WireException('Called a watermark method for final variation images on a original image!'); return; } // also we have to check if it already got watermarked, what we cannot get from the pageimage objects hirarchy // (that also is reflected in the filenames), as we have or will obfuscate(d) it: // read from IPTC tag if it is already processed $iptc = new hnReadWriteIptc($finalImage->filename); $isWatermarked = (bool)$iptc->readTag('isWatermarked'); if(!$isWatermarked) { ... So, if it is NOT watermarked, we will do it now with the code from our already built function. The only addition is to store the successful processing into the IPTC data, so that it is known with the next view call: ... // write our successful processing into our dedicated IPTC field to avoid repetitive processing $iptc->writeTag('isWatermarked', '1'); $iptc->writeIptcIntoFile(); } $event->return = $finalImage; }); 3) Our final code in the site/ready.php looks like this now: <?php namespace ProcessWire; /** * Example Pageimage Hook for watermarking functionality, * adds a new method to Pageimage objetcs named wm. * Used in a small tutorial series in the ProcessWire forums * https://processwire.com/talk/topic/25752-tutorial-how-to-add-a-site-wide-optional-watermarking-method-to-all-pageimages/ * * @version 0.0.2 * */ $this->addHook('Pageimage::wm', function(HookEvent $event) { // get the image out of the event object $finalImage = $event->object; // this is no longer the $originalImage from episode 1 !! // access the field of the transparent watermark overlay image in a robust way, // regardless if it is set to 1 image or multiple images, and if it has changed // in this regard since we wrote this hook function $watermarkImages = wire()->pages->get('id=1')->getUnformatted('setting_watermark'); // check if the imagefield exists and it at least contain one image, than fetch it if(!$watermarkImages || 0 == count($watermarkImages)) { // return the unmodified original image to do not break our front end site $event->return = $finalImage; // inform the admin about the missing watermark overlay, (or do something other useful) wireMail('admin@example.com', 'noreply@example.com', 'MISSING SITEWIDE WATERMARK OVERLAY IMAGE'); wireLog('errors', 'MISSING SITEWIDE WATERMARK OVERLAY IMAGE'); // stop further execution return; } // as we will overwrite this image with a watermarked version, // we have to make sure that this really is a variation and NOT an original image $isOriginal = null == $finalImage->getOriginal(); if($isOriginal) { // throw an exception, as this must be a bug in our code throw new WireException('Called a watermark method for final variation images on a original image!'); return; } // also we have to check if it already got watermarked, what we cannot get from the pageimage objects hirarchy // (that also reflects in the filenames), as we have or will obfuscate(d) them: // read from IPTC tag if it is already processed $iptc = new hnReadWriteIptc($finalImage->filename); $isWatermarked = (bool)$iptc->readTag('isWatermarked'); if(!$isWatermarked) { // inspect the given image $ii = new ImageInspector(); $info = (object) $ii->inspect($finalImage->filename)['info']; // our preferred watermark width is 200px, so lets check if it fits into the variation if(200 >= $info->width) { // does not fit, is it a portrait oriented image with more then 300 px height? if(200 < $info->height) { // ok, we have to rotate our watermark -90 degree to make it fit to the bottom right $pngAlphaImage = $watermarkImages->first()->width(200)->pim2Load('rot270')->rotate(270)->pimSave(); } else { // the variation is to small for useful watermarking, we will leave and output // it as is $event->return = $finalImage; return; } } else { // the width fits, get a watermark image of 200px $pngAlphaImage = $watermarkImages->first()->width(200); } // now lets apply the watermark to our final variation, // this has to be done a bit different than we have done in the first episode. // The difference is, that we previously created a intermediate variation. // Now we want to avoid this, as it would make our watermarking processing nearly useless // in regard of protecting the unwatermarked images // we invoke the Pageimage Manipulator in a way that lets us overwrite the loaded image, // what is not possible within its default behave $im = new \PageImageManipulator02(); $im = $im->imLoad($finalImage->filename, ['targetFilename' => $finalImage->filename])->setTargetFilename($finalImage->filename); $filename = $im->watermarkLogo($pngAlphaImage, 'SE', 0)->save(); $success = $finalImage->filename == $filename; // the imLoad()->save() process returns the filename of the processed image on success // $watermarkedImage = $finalImage; // this just should visualize what has happen in the black box :-) // to return the watermarked variation, // we have to replace the event object with our watermark variation // $event->return = $watermarkedImage; // But infact we have overwritten the discfile that belongs to our image object, // so there is no NEW imageobject that we have to change with the initial one // write our successful processing into our dedicated IPTC field to avoid repetitive processing $iptc->writeTag('isWatermarked', '1'); $iptc->writeIptcIntoFile(); } $event->return = $finalImage; }); Now we can call our watermarked images like this: $image = $page->images->first(); $variation = $image->width(800)->wm(); ?> <img src='<?=$variation->url?>' alt='<?=$variation->description?>' /> Thanks for reading! 😊
  10. You can set the module as permanent, then it cannot be uninstalled. public static function getModuleInfo() { return array( 'title' => '', 'version' => 100, 'summary' => '', 'href' => '', 'author' => '', 'singular' => true, 'autoload' => true, 'permanent' => true // <-- PERMANENT ); } Or, if you need it conditionally set, you can check your condition and set the permanent state in the modules config function.(?) public static function getModuleInfo() { $conditionMatch = (bool) calculateSomeConditionHere(); return array( 'title' => '', 'version' => 100, 'summary' => '', 'href' => '', 'author' => '', 'singular' => true, 'autoload' => true, 'permanent' => $conditionMatch // <-- PERMANENT ); }
  11. I have some plans with raspi zero(s) as this already have WLAN and are small and consumes low power etc. I haven't much investigated now. It's more my son who has had some experiences in this field. I want to have an interface where I can send to from mobiles and desktops in our local LAN / WLAN. ATM I have no time to start with this, but collecting some info on the way is always a good idea. Do you know something that you can recommend?
  12. As far as I have understood from fast reading through some docs: No. But I'm not sure yet and this needs more investigation. My interest is in regard of bringing small services online with small computers like arduinos, raspi zero, etc.
  13. This peace of software is impressive to me. Just want to share: Althttpd is a simple webserver that has run the https://sqlite.org/ website since 2004. Althttpd strives for simplicity, security, and low resource usage. As of 2018, the althttpd instance for sqlite.org answers about 500,000 HTTP requests per day (about 5 or 6 per second) delivering about 50GB of content per day (about 4.6 megabits/second) on a $40/month Linode. The load average on this machine normally stays around 0.1 or 0.2. About 19% of the HTTP requests are CGI to various Fossil source-code repositories. ... https://sqlite.org/althttpd/doc/trunk/althttpd.md The complete source code for althttpd is contained within a single C-code file with no dependences outside of the standard C library.
  14. Hi there, I'm starting a small series of tutorials here. The first one(s) deal with the topic "How can I add a watermark to all pageimages of a site?" first episode "Tutorial how to add a site wide optional watermarking method to all pageimages" second episode "Second Episode: "How can I add a watermark to all pageimages of a site?"" This is targeted to all, - beginners, intermediate, pros, - but mainly to interested PW lovers. The fictitious starting situation could be that a website owner has been creating beautiful photos for many years and would like to show them on his site in higher output sizes. A reference to real people or events does not exist, or would be "purely coincidental". Could someone please tell @Rob(AU) about this. πŸ˜‰ This first episode shows a really straight and forward solution that could be an answer to the question "How can I get things be done?". We will create a PHP function that will give back a watermarked variation of every pageimage we put into it. We don't want bother our self to much with coding or image manipulation stuff. So for this first example we will setup our site with a single centralized image field that can contain one PNG image that should be used as our alpha transparency overlay for all watermarked image variations. Additionally to that, we install a PW third party module that does the image manipulation stuff. I will use the Page Image Manipulation module for this, because I know it very well. There are also *other good solutions in the PW ecosystem and if you would like you can add and use every existing PHP library that can assist you, or write your own individual low level code for that. But that's not our topic here. We want to get things done. Lets start! 1) Create a single centralized image field somewhere on a settings page if you have one. If your site doesn't has one, because you haven't had a need for that til now, the homepage may be a good place too. If you go with the homepage, but for other situations too, it may be a good idea to separate the overlay image input field from other content you have on that page. 1.1) Create an image field that should contain one file, and only of type PNG 1.2) Create a fieldset tab 1.3) Add both to the template of your choice 2) Add the Page Image Manipulator module to your site ... 2.1) ... by going to your modules section in the admin, select the tab "New" and add the Modules Classname under "Add Module From Directory": PageImageManipulator 2.2) Download and install it. 2.3) Go to the modules site tab and scroll down to the position where you find the entries for a Pageimage Manipulator 1 and a Pageimage Manipulator 2. There you can savely uninstall the legacy version 1 that is only needed for PW version prior to 2.6. 3) Provide a PNG overlay image. For this example we want use a 2000 x 2000 px transparent PNG image with our watermark sign or watermark text. If you don't have one ready but have an image manipulation program on your local machine at hand that excepts photoshop actions, you can download one here for fast creation: photoshop_action_PW-png-creations.zip 3.1) Create a new image 2000px x 2000px with a transparent background 3.2) Add some meaningful text at a position you like. If you want to use the PS action, don't forget to rasterize all vector text before starting it. 3.3) Regardless if you used the PS action or created some nice overlay in another way, you should set the opacity of the final image to something between 20 and 40 percent. You may have to test this out for a production version. But now we want to get things done. Save the final version and ... 3.4) Upload it into the centralized image field in your site! 4) Create a PHP function that encapsulates the watermark overlay process and outputs a finished pageimage as a variation. To get a go here without messing up our site, we can create a test.php file as sibling of PWs index.php. We will *boostrap PW there and get full access to the API site this way: <?php namespace ProcessWire; include __DIR__ . '/index.php'; function ourWatermarkTestfunction(Pageimage $image) { return $watermarkedImage; } Let the file operating in the PW namespace, boostrap the PW API and our barebone function. We want to pass in a pageimage and we want to get out a pageimage that is a watermarked variation of the source pageimage. If we want to test what we have so far, we would fetch us an image from a page we know it has one and pass it into the function: <?php namespace ProcessWire; include __DIR__ . '/index.php'; function ourWatermarkTestfunction(Pageimage $originalImage) { $watermarkedImage = $originalImage; return $watermarkedImage; } $image = $pages->get('[your selector here to a well known page that has an images field called images]')->images->first(); $variation = ourWatermarkTestfunction($image); $variation = $variation->width(800); echo "<img src='{$variation->url}' alt='{$variation->description}' />"; We tweaked our function to pass us the input image as output. And we echo out it as a HTML image. If this is working as expected, we can start to do code the main part of our function. We will use the module Pageimage Manipulator for that and referring to its description page, when we scroll down to the method called watermarkLogo, it tells us how we can use it. watermarkLogo($pngAlphaImage, $position='center', $padding=2) It want to have one mandatory param, the transparent PNG overlay image. Optionally it can take params for positioning the overlay. For our test we will use the defaults and as they are optional arguments, we don't need to call them. Referring to the PIM2 API, we have to start the process by calling pim2Load($prefix, $param2=optional, $param3=optional) And at the end we have to call pimSave() Putting this together we will get this: function ourWatermarkTestfunction(Pageimage $originalImage) { $watermarkedImage = $originalImage->pim2Load('wm')->watermarkLogo($pngAlphaImage)->pimSave(); return $watermarkedImage; } So, this will produce an error as we have not specified what $pngAlphaImage is. It should be our site wide overlay image that we have stored at a well known place, for example on our homepage. Also we want to apply a check if we really get a Pageimage from there, to avoid unhandled errors if for whatever reason the image gets deleted by accident at some time in the future. function ourWatermarkTestfunction(Pageimage $originalImage) { // get the field of the transparent watermark overlay image in a robust way, // regardless if it is set to 1 image or multiple images, and if it gets changed or not in the future $watermarkImages = wire()->pages->get('id=1')->getUnformatted('setting_watermark'); if(!$watermarkImages) { // return the unmodified original image to do not break our front end site return $originalImage; } // check if it at least contain one image, than fetch it if(0 == count($watermarkImages)) { // return the unmodified original image to do not break our front end site return $originalImage; } $pngAlphaImage = $watermarkImages->first(); // is the same as wire()->pages->get('id=1')->getUnformatted('setting_watermark')->first() // now let the module process our watermarking and save it into a variation $watermarkedImage = $originalImage->pim2Load('wm')->watermarkLogo($pngAlphaImage)->pimSave(); // return the watermarked variation return $watermarkedImage; } Lets have a visually check if all went well: $image = $pages->get('[your selector here to a well known page that has an images field called images]')->images->first(); $variation = ourWatermarkTestfunction($image); $variation = $variation->width(800); ?> <img src='<?=$variation->url?>' alt='<?=$variation->description?>' /> Now we should see our watermarked variation in the same dimensions as the original is. That's fine and it's time to leave the test and implement that into our custom site API. We will add a hook to the Pageimage object that we want call 'wm' and that does exactly what we have created here. 5) Open your site/ready.php and add the following hook into it: <?php namespace ProcessWire; $this->addHook('Pageimage::wm', function(HookEvent $event) { }); Now we can call on every Pageimage the new method wm: $image->wm->width(500) to get a watermarked and 500px width resized variation out. Ok, first we have to add our functions body into it. And we slightly have to change it a bit, because now it became a anonymous function of a HookEvent. Therefore it has not a own name anymore, and the input is not a Pageimage in the first time, but a HookEvent. (But in the end, it is a Pageimage, because it is a hooked event of a Pageimage. πŸ™‚) /** * Example Pageimage Hook for watermarking functionality, * adds a new method to Pageimage objetcs named wm. * Used in a small tutorial series in the ProcessWire forums * https://processwire.com/talk/topic/25752-tutorial-how-to-add-a-site-wide-optional-watermarking-method-to-all-pageimages/ * * @version 0.0.1 * * @var HookEvent */ $this->addHook('Pageimage::wm', function(HookEvent $event) { // get the image out of the event object $originalImage = $event->object; // access the field of the transparent watermark overlay image in a robust way, // regardless if it is set to 1 image or multiple images, and if it has changed // in this regard since we wrote this hook function $watermarkImages = wire()->pages->get('id=1')->getUnformatted('setting_watermark'); // check if the imagefield exists and it at least contain one image, than fetch it if(!$watermarkImages || 0 == count($watermarkImages)) { // return the unmodified original image to do not break our front end site $event->return = $originalImage; // inform the admin about the missing watermark overlay, (or do something other useful) wireMail('admin@example.com', 'noreply@example.com', 'MISSING SITEWIDE WATERMARK OVERLAY IMAGE'); wireLog('errors', 'MISSING SITEWIDE WATERMARK OVERLAY IMAGE'); // stop further execution return; } $pngAlphaImage = $watermarkImages->first(); // is the same as wire()->pages->get('id=1')->getUnformatted('setting_watermark')->first() // now let the module process our watermarking and save it into a variation $watermarkedImage = $originalImage->pim2Load('wm')->watermarkLogo($pngAlphaImage)->pimSave(); // to return the watermarked variation, // we have to replace the event object with our watermark variation $event->return = $watermarkedImage; }); Now we can call our watermarked images like this: $image = $page->images->first(); $variation = $image->wm()->width(800); ?> <img src='<?=$variation->url?>' alt='<?=$variation->description?>' /> Now all looks fine in the first line. But there is some room for improvements also in this basic "get the things done" solution. I keep this for one of the next episodes, where we can dive a little bit into image debugging and / or create a more advanced version of the image watermarking function, maybe as a PW module. Thanks for reading! 😊 TL;DR *pageimage https://processwire.com/api/ref/pageimage/ *boostrap https://processwire.com/docs/front-end/include/ *image modules https://processwire.com/modules/category/photo-video/ *hooks https://processwire.com/docs/modules/hooks/ *hook event__https://processwire.com/api/ref/hook-event/
  15. Hi, I used this one a lot, but before you go further with it: It has one disadvantage. You have to use one type for all fields (subfields). So, pretty fine to use textarea for text and textarea, but there is already a new fieldtype out that makes the textareas obsolete. It is called Combo and since yesterday available in version v6beta. As you said: So.Many.Options! πŸ™‚ The only part that seems to be different, what I got so far til now, (started exploring / reading with / about COMBO two weeks ago), is a difference with searching / finding results in multi language sites. Whereas all (?) other (text)fields have a sort of scoped language pools where the search engine by default only searches in one language, the current active language, with the Combofield this is not possible. With other fields you can manage from the API site to search in more than one language of course, or in another then the current language. So ATM I stuck at if I should call this an advantage of the Combofield (in some situations) or more a disadvantage. At least, ATM it seems a significant difference that needs attention when planning a sites field setup in multi language sites with FE search functionality. S.M.O!
Γ—
Γ—
  • Create New...