Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 06/16/2013 in all areas

  1. Well I lost the parrot sometime around when I was last being a pirate: But I found him again when I went to a fancy dress party as French Polynesia (the theme was countries): What? How is that French Polynesia? French (beret) polly (parrot) knees (I'm showing mine) ear (Spock ear). French-poly-knees-ear. No, nobody guessed it on the day
    3 points
  2. If you don't need anything in a hurry I will be building a newsletter system along the lines of your requirements but it will be a few months off. It's a module someone is paying me to build, but I'm working on another one first
    2 points
  3. I wrote my own code which works. Haha I´m feeling like a PHP pro right now $photos = $page->children($selector); if (count($photos)) { foreach($photos as $photo) { echo '<ul>'; echo '<li><a href="'.$photo->url.'">'.$photo->title.'</a></li>'; echo '<li>Model: '.$photo->camera_model.'</li>'; echo '<li>Resolution: '.$photo->photo_resolution.'</li>'; echo '<li>Size:'.$photo->photo_size.'</li>'; echo '</ul>'; } } else { echo '<p>No photos found.</p>'; } ?> I have no idea if this is good PHP coding practice or not, but it works
    2 points
  4. Hey Pete, I used these color functions in a project, as I needed also to use soma's Sliders for color outputs. Maybe you can use one or more of them to. // rgbToHsl function rgbToHsl ( array $rgb ) { list( $r, $g, $b ) = $rgb; $r/= 255; $g/= 255; $b/= 255; $max = max( $r, $g, $b ); $min = min( $r, $g, $b ); $h; $s; $l = ( $max + $min )/ 2; if ( $max == $min ) { $h = $s = 0; } else { $d = $max - $min; $s = $l > 0.5 ? $d/ ( 2 - $max - $min ) : $d/ ( $max + $min ); switch( $max ) { case $r: $h = ( $g - $b )/ $d + ( $g < $b ? 6 : 0 ); break; case $g: $h = ( $b - $r )/ $d + 2; break; case $b: $h = ( $r - $g )/ $d + 4; break; } $h/= 6; } return array( $h, $s, $l ); } // hslToRgb function hslToRgb ( array $hsl ) { list( $h, $s, $l ) = $hsl; $r; $g; $b; if ( $s == 0 ) { $r = $g = $b = $l; } else { $q = $l < 0.5 ? $l * ( 1 + $s ) : $l + $s - $l * $s; $p = 2 * $l - $q; $r = hueToRgb( $p, $q, $h + 1/ 3 ); $g = hueToRgb( $p, $q, $h ); $b = hueToRgb( $p, $q, $h - 1/ 3 ); } return array( round( $r * 255 ), round( $g * 255 ), round( $b * 255 ) ); } // Convert percentages to points (0-255) function normalizeCssRgb ( array $rgb ) { foreach ( $rgb as &$val ) { if ( strpos( $val, '%' ) !== false ) { $val = str_replace( '%', '', $val ); $val = round( $val * 2.55 ); } } return $rgb; } // cssHslToRgb function cssHslToRgb ( array $hsl ) { // Normalize the hue degree value then convert to float $h = array_shift( $hsl ); $h = $h % 360; if ( $h < 0 ) { $h = 360 + $h; } $h = $h/ 360; // Convert s and l to floats foreach ( $hsl as &$val ) { $val = str_replace( '%', '', $val ); $val/= 100; } list( $s, $l ) = $hsl; $hsl = array( $h, $s, $l ); $rgb = hslToRgb( $hsl ); return $rgb; } // hueToRgb function hueToRgb ( $p, $q, $t ) { if ( $t < 0 ) $t += 1; if ( $t > 1 ) $t -= 1; if ( $t < 1/6 ) return $p + ( $q - $p ) * 6 * $t; if ( $t < 1/2 ) return $q; if ( $t < 2/3 ) return $p + ( $q - $p ) * ( 2/ 3 - $t ) * 6; return $p; } // rgbToHex function rgbToHex ( array $rgb ) { $hex_out = '#'; foreach ( $rgb as $val ) { $hex_out .= str_pad( dechex( $val ), 2, '0', STR_PAD_LEFT ); } return $hex_out; } // hexToRgb function hexToRgb ( $hex ) { $hex = substr( $hex, 1 ); // Handle shortened format if ( strlen( $hex ) === 3 ) { $long_hex = array(); foreach ( str_split( $hex ) as $val ) { $long_hex[] = $val . $val; } $hex = $long_hex; } else { $hex = str_split( $hex, 2 ); } return array_map( 'hexdec', $hex ); } /** * * Output to a "r, g, b" string * */ function colorStringRGB($h, $s, $l ) { $output = ''; $hsl = array($h, $s, $l); $color = cssHslToRgb($hsl); foreach( $color as $rgb ) $output .= $rgb . ', '; $output = rtrim( $output, ', ' ); return $output; }
    2 points
  5. You can do something like this: echo "The next article is:"; $id = 0; //check if there's this month next article if ($id = $page->next->id); //check if there's next month article elseif (count($page->parent->next->children)) { $id = $page->parent->next->children->first()->id; } //heck if there's next year article elseif (count($page->parent->parent->next->children)) { if (count($page->parent->parent->next->children->first()->children)) { $id = $page->parent->parent->next->children->first()->children->first()->id; } } if (!$id) echo "This is the end my friend."; else { $p = $pages->get($id); echo "<br /><a href='{$p->url}'>{$p->title}</a>"; } You have to put this code in your article template. It suggests that you don't have month pages without articles. Kongondo is totally right that you have to be comfortable with PHP, HTML, CSS at least at the beginner's level to enjoy the benefits of ProcessWire. ProcessWire propels experimentation and creativity so you could go ahead and modify the code for finding previous articles as your homework
    2 points
  6. Ryan, brilliant stuff! For me it won't work in my first attempt and it took me some time to figure out my failure. You can't use the identifier "name" for a variable. [[gallery name="Test"]] I didn't found any comments on this issue, so perhaps it helps.
    2 points
  7. To create a sitemap.xml you can use Pete's Sitemap XML module, or you can create a template file and page to do it for you. This post explains how to create a template to do it for you. The benefit here is that you may find it simpler to tweak a template file than a module, though either is a good solution. Here is how to do it with a template file and a page: sitemap-xml.php <?php namespace ProcessWire; /** * 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/')); * */ 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) { $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(); // If you want to include other hidden pages: // echo renderSitemapXML(array('/path/to/hidden/page/'));
    1 point
  8. Module is no longer maintained. Github Repo deleted! Hello community, based on the freely available flash mp3 player (http://flash-mp3-player.net) I set a module, which creates a field to store mp3-audio files in the backend and an audio player in the frontend. mp3 files can be added by drag and drop. The audio player is configurable in module settings. (Size, colors, display of buttons, volume control, etc.) About third party Code More information http://flash-mp3-player.net/players/ Code https://github.com/neolao/mp3-player License http://creativecommons.org/licenses/by-sa/3.0/deed.en Author The Initial Developer of the Original Code is neolao (neolao@gmail.com). How to install download the 2 Files: http://flash-mp3-player.net/players/maxi/download/ http://flash-mp3-player.net/medias/player_mp3_maxi.swf http://flash-mp3-player.net/players/multi/download/ http://flash-mp3-player.net/medias/player_mp3_multi.swf Download from github the module, unzip, copy module and the 2 swf Files in a folder /Audio_MP3/ and add the folder to your /site/modules/ directory. Click *check for new modules* in ProcessWire Admin Modules screen. Click *install* for the module labeled: "Audio_MP3". Now you will be on the module config screen. Please make note of the config options and set as you want. How to use Add the Audio field to your Template in Setup > Templates. Add the following code to the template file to get the title list: $modules->Audio_MP3->player['title']; to get the player: $modules->Audio_MP3->player['code']; Create a page using the Template. Drag and drop mp3 or mp3.zip files in the audio field in the Page-Edit-Area. How it works If you store just one File in the Page-Edit-Area the Maxi-Player will be loaded. For 2 or more files the Module will switch to Multi-Player. If you want an alternative title, you can put it in the Description-field of the Audio Field, which is visible after the file upload. Module Configuration - width: Forces the video width. - height: Forces the video height. //only Maxi-Player only one file stored - volume: The initial volume, between 0 and 200. By default set to 50 - showstop: 1 to show the STOP button. - showinfo: 1 to show the INFO button. - showvolume: 1 to show the VOLUME button. - showloading: 'alway','never','autohide') to show the LOADING bar// By default set to 'alway' - showinfo: 1 to show the INFO button. - buttonwidth: The buttons width. By default set to 30. - volumewidth: The width of the VOLUME button. By default set to 30. - volumeheight: The height of the VOLUME button. By default set to 10 - loadingcolor: The color of loading bar in hex format without #//default: ffff75 - sliderovercolor: Hover color of the bar in hex format without # - buttonovercolor: Hover color of buttons in hex format without # feel free to add more configuration options to the module. More information here: http://flash-mp3-player.net/players/multi/documentation/ http://flash-mp3-player.net/players/maxi/documentation/ Need some help! I would like to make the code available via $page->player['code']; but I don't know how. README.txt Audio_MP3.module
    1 point
  9. virgintribesa.com Created for Virgin South Africa Employee engagement - they're yet to have much content up there but the site is pretty much finished.
    1 point
  10. Today I just want to show a new page build with ProcessWire. It's nothing fancy but the client is more than happy. http://www.rv-heidenheim.de (german content) The local horse club had an old ugly Flashwebsite which we relaced with a fresh and modern PW site. The goal was to create an easy system to maintain content and to inform people about the club. Behind the scenes: Processwire with ProCache let the site run faster than any horse in the barn. Using the PageLink Field to create a menu structur. Skeletton 960px grid but right now we removed the mediaqueries. We will add the mobile view later. The weater widget uses this jQuery plugin. All widgets in the sidebar are pages and fully configurable by the backend user. A year ago, this was my first Processwire page. But it was never released and we made a complete new second version last month. First time I've used an icon font. Try fontello.com to build your own icon font. The site was designed on a friday evening and only 24 hours later the whole site was done. Using PW it's just a charm to build such small sites and let people insert their content.
    1 point
  11. As usual Italy is at the bottom of the list....we are too proud of pizza and Cristoforo Colombo to make a step towards evolution
    1 point
  12. I wasn't actually looking for this at all, but it just shows how far you can go with Google Maps and a chunk of custom code! http://www.splitbrain.org/blog/2009-02/01-a_pirate_map_with_libgd_and_google_maps Very cool!
    1 point
  13. India on 5th position? It's good to know that indians are also using it but I see a very few(almost none) of them here. Anyways, considering the quality of indian market, they sure do need a better system like ProcessWire to build better websites. *sigh*
    1 point
  14. Wow, Pete! This walking puzzle thing is approachable only for Einstein-level minds
    1 point
  15. This is an error MySQL would report if there was no "data1439" column present in the field_title table. I'm guessing that 1439 is the ID of your "default" language. There was a bug in PW related to this that I fixed recently (within the last 3 months I think). Double check that you are using PW 2.3. If you are already using it, you might try switching to the dev branch (at least to test) to see if that fixes it. Please let me know what you find.
    1 point
  16. So whilst I wasn't looking for this: http://processwire.com/talk/topic/3851-pirate-maps/ I finally found what I was looking for. Essentially I needed to give a client the ability to use Soma's colour picker and tie the colour to an element on the page. Problem is the element's background has a gradient - disaster! Not a problem any more, as it's possible to take a hex value and calculate lighter and darker colours: http://stackoverflow.com/questions/5199783/help-needed-with-php-function-brightness-making-rgb-colors-darker-brighter (see accepted answer halfway down). The thing with web design/development is that pretty much anything is possible, and usually if you have an obscure requirement someone else will already have thought of a solution. Don't be limited by anything other than your imagination
    1 point
  17. Maybe this is also interesting https://github.com/mexitek/phpColors
    1 point
  18. Gah, spoke too soon. Works for increasing brightness but not decreasing EDIT: there was a fix in the last comment below the "correct" answer - changing the last line to this works perfectly for increases and decreases in colour brightness: return sprintf("#%02x%02x%02x", $r,$g,$b); I'm using it so that someone can set the hover colour of jQuery UI accordions in association with some gradient styles from here: http://www.colorzilla.com/gradient-editor/
    1 point
  19. Based on some things I've been reading around the forums as well as experience from other systems, I think it would be nice if, when someone selects "Admin Themes" from the drop-down, the layout changes to show a thumbnail of the admin theme with author's name and other details below in a grid. I realise that currently there is no simple way to do this, but an idea I had is that you simple add a thumbnail.jpg file to every theme on GitHub (and theme authors add these for new ones too) and as long as each thumbnail is the same name you can link to them directly with a URL a bit like this: https://github.com/libgit2/libgit2sharp/raw/master/square-logo.png I think linking to them is fine and that way you rule out showing an old thumbnail - I did toy with the idea of downloading them into a cache but you can never be sure you have the latest (though there are ways to check). I was going to attempt this myself but I'll be mega-busy for at least a month and besides, Soma is a coding machine What do you think? Kind of like the themes page for WordPress but just for admin themes. Could even allow a few thumbnails (up to 3 maybe) and do something neat around that? If authors don't put their themes on GitHub then they do lose out, but the counter-argument is that they lose out by not having them on GitHub - several of my modules have received updates recently that I haven't had to be involved in other than committing the changes, so I'm sure themes can benefit in the same way
    1 point
  20. @roelof: you might also want to check out this thread: http://processwire.com/talk/topic/3714-how-to-do-this/. Unless I'm misinterpreting something here it's essentially the same question. By the way: when starting new discussions, you really should try to include something about your question in the thread name itself. It's difficult to find related discussions when they're named like "How to do this", "How can I do this" etc. Just another friendly forum tip..
    1 point
  21. Hi, Totoff. You have to add title to valid attributes of <a> tag. You can find this option on the "input" tab of your text field -> TinyMCE configuration -> valid_elements. Find <a> attribute and add title to it: a[href|target|name|title].
    1 point
  22. Hi Vineet - i guess my main confusion would be about the seats - do users purchase a specific seat, can they select it, and if so, how do you prevent 2 users from selecting the same seat? As far as Foxycart goes, the pricing for the service itself is $15 per month, but depending on what sort of payment processor you use, there might be additional fees from that, for example, PayPal Payments Pro i think costs around $30 per month, and that's probably one of the cheaper payment processors they support. If you want a much simpler and less expensive option, jCart might work well, since it quickly and easily plugs into any site and supports regular PayPal payments; again the main caveat is how to you have interaction with PayPal and Processwire if you are trying to automate the ticket sales... The last site i did that involved theater ticketing used OvationTix, and as far as I know it worked well. I can't say i like the ovationtix system that much – while it is really powerful, the whole thing seems a bit antiquated; You might want to take a look at that anyway, i think it might give you some ideas, they have been around for a while and their system is really well proven as far as managing large theaters and productions. One of the key things it does is to allow users to pick their seats, it updates the chart based on what seats are sold, and also allows you to process point-of-sale transactions at the event... -marc
    1 point
  23. Roelof, I do not mean to be rude. I would really love to help you but am finding it rather difficult at the moment for three reasons. One, you have started interrelated threads and posts in various places and I just can't keep up. Second, I am not sure how comfortable you are with PHP and PW. Stating this can be helpful so that people responding to your questions don't make assumptions. Third, I think it would be appreciated if your questions were more specific. Take for instance your question above are you talking about pagination? Are you talking about a menu? Or are you talking about listing latest articles? What exactly does the client want to do? What have you tried? How did it go? Again, I don't mean to be rude but I think you will get better answers if you heed to these simple suggestions: 1. Please try and post in one thread before opening another 2. Please be more specific with your questions. i am not a moderator in these forums so this is just plain advice from one newbie to another. I mean no offence; I only wish to see you get the answers you need. Building sites in PW should be enjoyable, not frustrating and I wish that your experience with the system is enjoyable. Thanks for reading. Cheers/k
    1 point
  24. I think this is one of those things that philosophically we don't think belongs in the CMS. You are better off using a service (MailChimp, etc.). Doing large email distributions from your CMS/webserver there is always a danger of your server ending up on an email blacklist. Though I can't argue with the convenience factor (I'm guilty of sending out my small distribution newsletters directly from the server). But if I built this to work right in the CMS, I'd probably feel like I was encouraging some bad practices. Now I've heard of others working on things like MailChimp integration with ProcessWire, and that actually sounds pretty interesting.
    1 point
  25. Nico, just updated the theme, cosmetic changes as requested by "woop". Pull request at github. * give the hidden pages an italic style and a lighter shade * lighten the shade of the children page count * Added active state style for the submenu buttons
    1 point
  26. This is defined here: /wire/config.php $config->http404PageID = 27; But this is PW. We do not hack the core. So what do we do? Uh, this is PW, we can override this . So, we put our own 404 page id configuration in our /site/config.php $config->http404PageID = 1035;// my custom 404 page A word of caution though in /wire/config.php * Hard-coded configuration options for ProcessWire * These may be overridden in the /site/config.php, but it is not recommended. More info here: http://processwire.com/api/variables/config/
    1 point
  27. I think I got them working! Just had to change som asc/desc values. The resolution and size sortings may clash because of the similarity of their values, plus having only 3 pages to sort doesn´t help. I also manages to code and get the selected="selected" working! All by myself! With this code: <label for="camera_model">Camera model</label> <select name="camera_model" id="camera_model"> <option value="desc"<?php if ($input->get->camera_model == 'desc') { echo ' selected="selected"'; } ?>>Alphabetically A-Z</option> <option value="asc"<?php if ($input->get->camera_model == 'asc') { echo ' selected="selected"'; } ?>>Alphabetically Z-A</option> </select>
    1 point
  28. Here we go: https://github.com/apeisa/CommentRatings
    1 point
  29. Thanks for the kind words ezeey! Nothing works with multisite I hope to find some time this weekend to take a look. If you can provide any more information it would definitely help (how to reproduce, test site I can login etc).
    1 point
  30. Hi kalmtl, welcome! 1) Pw can handle > 1000 pages (games) without problems. It scales very well! If you have files/images assigned to your pages, then each page gets a folder where the files are stored. As long as your filesystem / server can handle the files, you won't have any problems. That said, I currently have a project with > 100'000 pages and ~ 1900 Users and everything works fine 2) + 3) Nope. Give your 'game' template the field it needs. Then you can import your old data straightforward with the API. There is also a module by ryan, Import Pages from CSV that maybe useful. If you have relational data separated in different tables, then you could build a similair structure in Pw with Pages, Templates and Page-fields. For Example, store the genres as pages too and in your game-template, create a page field 'genre' that links to a genre-page. Some sample code how easy you can create a new page: $p = new Page(); $p->template = 'game'; $p->parent = $pages->get('games'); $p->title = 'Awesome flash game'; $p->publisher = $pages->get('template=publisher, id=4322'); $p->genre = $pages->get('template=genre, name=action'); $p->year = 2011; $p->save();
    1 point
  31. Perhaps this post will be helpful? http://processwire.com/talk/topic/958-repeatable-fields/?p=8432 And this too: http://processwire.com/api/fieldtypes/repeaters/
    1 point
  32. @apeisa: I'm trying to use this on a PW 2.3 site and everything seems to work from administration point of view, but so far all I'm getting is this error message when I try to echo $page->my_poll (my_poll being the name of the field) on frontend: Any idea what could be causing this? I'll probably try to debug it properly later, but not being exactly familiar with fieldtypes / inputfields doesn't really help here.. Edit: reinstalling FieldtypePoll and InputfieldPoll fixed the problem. There was something strange with the install process originally (autoinstall didn't work for InputfieldPoll, installing FieldtypePoll before AngularJS caused errors etc.) so this should've been pretty obvious solution. Anyway, problem solved and everything seems to work now, sorry for the confusion PS. Have you considered adding this to the modules directory? Seems like a nice addition there.
    1 point
  33. looks like a convincing offer: i'll get everything out of one hand, from business consultancy to tax service and tree surgery. one-stop-shopping at it's best. if i only would understand the difference between webdesign and internet home pages. anyway, i'll start with a non-designed homepage and add webdesign later ...
    1 point
  34. 1 point
  35. Hi Ryan, i have same problem. Another users than admin can not edit cropimage field in repeater. I tested your suggestion, but not working... Soma helped me thrue IRC and this workaround works for me: wire()->addHookAfter('Page::editable', null, 'hookEditable'); function hookEditable($event) { if($event->return) return; $page = $event->object; if($page instanceof RepeaterPage) { $event->return = $page->getForPage()->editable(); } } We tested some changes like: if(!wire("pages")->get((int) $this->input->get->pages_id)->editable()) throw new WirePermissionException('Not Editable'); or if(!$page->getForPage()->editable()) throw new WirePermissionException('Not Editable'); in ProcessCropImage.module (execute and executeSave functions) but more work will need to be done in cropimage module.
    1 point
  36. And we have you to thank for hiring him in the first place which led us to Hanna Code! Thank you!
    1 point
  37. Thanks for your help. I'm now using the direct database implementation and it works great with much leaner code than I had before. $r=$db->query('SELECT pages_id, ('.$user_location->lng.'-lng)*('.$user_location->lng.'-lng) + ('.$user_location->lat.'-lat)*('.$user_location->lat.'-lat) AS "distance" FROM field_map_location ORDER BY distance'); $ides=array(); while($row=$r->fetch_row()) $ides[] = $row[0]; $query = 'id=' . implode('|', $ides); // Output: 1075|1070|1074 $locs = $pages->find($query); foreach($locs as $result) { echo "{$result->id}|"; //Output: 1070|1074|1075 } However, there is still one problem left. If I look at the $query, the IDs are in the right order (based on their distance to the $user_location) but as soon as I echo them out in the foreach loop they are ordered by ID. I guess that the $pages->find function automatically orders the pages if no 'sort' variable is given. Is there a way to sort them according to the query string?
    1 point
  38. Don't be scared off by the look — it might look a tad dated, but there is a very active and helpful community. The admin can be themed to look a bit more modern (keep in mind I did that nearly 4 years ago). There is a lot going on behind the scenes with development, and I think they are well on their way to releasing a complete overhaul (TXP5). I can't recommend it enough if you are looking for solution that offers a tagging language and lots of ready-to-use plugins.
    1 point
  39. I would suggest you take a look at Textpattern for the smaller builds where you need a stable of plugins that can do a variety of what you mentioned above. It uses a tagging language much like EE, although I personally find Textpattern's a bit easier. I've built dozens of sites with Textpattern, and still continue to use it for a variety of projects. Good luck.
    1 point
  40. This should do it throw new Wire404Exception();
    1 point
  41. Attached is an entire Fieldtype and Inputfield that show an example of 3 inputs for each image (title, tags and description). I've also set it up so that you can just change the schema in the getDatabaseSchema() function and it should automatically work with whatever varchar or text fields that you add. Though note that you'll want to make those changes before you create any fields with it. This works because the only place these custom fields are defined is in that schema, and everything else in the Fieldtype and Inputfield just picks it up from that schema. In the future, I will probably use this as a foundation for a more advanced image/file fieldtype where you can specify the schema from the field's configuration in the admin, rather than modifying the code. But figured this would be a good example for what you asked for. Ryan FieldtypeImageExtra.zip
    1 point
×
×
  • Create New...