Leaderboard
Popular Content
Showing content with the highest reputation on 09/09/2013 in all areas
-
Menu Builder As of 29 December 2017 ProcessWire versions earlier than 3.x are not supported Modules Directory Project Page Read Me (How to install, use, etc..) For highly customisable menus, please see this post. If you want a navigation that mirrors your ProcessWire page tree, the system allows you to easily create recursive menus using either vanilla PHP or Soma's great MarkupSimpleNavigation. In some cases, however, you may wish to create menus that: 1. Do not mirror you site's page tree (hirarchies and ancestry); and 2. You can add custom links (external to your site) to. That is primarily where Menu Builder comes in. It is also helpful if you: 3. Prefer creating menus via drag and drop 4. Have a need for menus (or other listings) that will be changing regularly or that you want to allow your admin users to edit. The issue of custom menus is not new here in the forums. The difference is that this module allows you to easily create such menus via drag and drop in the Admin. Actually, you can even use it to just create some list if you wanted to. In the backend, the module uses the jQueryUI plugin nestedSortable by Manuele J Sarfatti for the drag and drop and is inspired in part by the WP Custom Menu feature. Please read the Read Me completely before using this module. For Complex or highly-customised menus, it is recommended to use the getMenuItems() method as detailed in this post. Features Ability to create menus that do not mirror your ProcessWire Page Tree hierarchy/structure Menus can contain both ProcessWire pages and custom links Create menu hierarchies and nesting via drag and drop Easily add CSS IDs and Classes to each menu item on creating the menu items (both custom and from ProcessWire pages) or post creation. Optionally set custom links to open in a new tab Change menu item titles built from ProcessWire pages (without affecting the original page). E.g. if you have a page titled 'About Us' but you want the menu item title to be 'About' Readily view the structure and settings for each menu item Menus stored as pages (note: just the menu, not the items!) Menu items stored as JSON in a field in the menu pages (empty values not stored) Add menu items from ProcessWire pages using page fields (option to choose between PageAutocomplete and AsmSelect [default]) or a Selector (e.g. template=basic-page, limit=20, sort=title). For page fields, you can specify a selector to return only those specified pages for selection in the page field (i.e. asm and autocomplete) For superusers, optionally allow markup in your menu titles, e.g. <span>About</span> Menu settings for nestedSortable - e.g. maxLevels (limit nesting levels) Advanced features (e.g. add pages via selector, menu settings) currently permissible to superadmins only (may change to be permission-based) Delete single or all menu items without deleting the menu itself Lock down menus for editing Highly configurable MarkupMenuBuilder - e.g. can pass menu id, title, name or array to render(); Passing an array means you can conditionally manipulate it before rendering, e.g. make certain menu branches visible only to certain users [the code is up to you!] Optionally grab menu items only (as a Menu object WireArray or a normal array) and use your own code to create custom highly complex menus to meet any need. More... In the backend, ProcessMenuBuilder does the menu creation. For the frontend, menus are displayed using MarkupMenuBuilder. Credits In this module's infancy (way back!), I wanted to know more about ProcessWire modules as well as improve my PHP skills. As they say, what better way to learn than to actually create something? So, I developed this module (instead of writing PW tutorials as promised, tsk, tsk, naughty, naughty!) in my own summer of code . Props to Wanze, Soma, Pete, Antti and Ryan whose modules I studied (read copied ) to help in my module development and to Teppo for his wonderful write-up on the "Anatomy of fields in ProcessWire" that vastly improved my knowledge and understanding of how PW works. Diogo and marcus for idea about using pages (rather than a custom db table), onjegolders for his helpful UI comments, Martijn Geerts, OrganizedFellow, dazzyweb and Mike Anthony for 'pushing me' to complete this module and netcarver for help with the code. Screens4 points
-
3 points
-
Thank you Soma It works perfect for me (and makes absolutely sense). This little tweak should definitely be integrated in the github- trunk. It's such a great pleasure to see members in a support forum that really know what they are talking about. The last three years I've worked with joomla and it was horrible because 95% of all the answers from "experienced" admins where about clicking something and installing another module... Thanks again!3 points
-
I've been working with Drupal since v5 all the way to the current version. I find it quite a powerful beast, and I can honestly say I enjoy working with it for the most part. My biggest pet peeve with Drupal is how complex the themeing is, and what a tangled mess it spits out. This is supposed to change with Drupal 8, so time will tell. The other thing is that for how flexible it can be, it can conversely be very inflexible, and the more complexity you need the more modules you have to use. The more I learn Processwire the more I believe that you can accomplish pretty much anything with it without getting too much complexity involved. Since I'm still learning PW I still find myself reaching for Drupal particularly for projects that need complex user relationships and roles and permission settings. Drupal excels at this. I am sure Processwire does too, but I'm not there yet. I guess the other thing I love about Drupal is it has inbuilt multiblog and forum, so it's the logical choice for me for certain projects where a client wants these things and has a limited budget. Because I know Drupal well I can hammer out a Drupal project with these things quickly (as long as someone else does the themeing... LOL)3 points
-
Thanks both (Ryan and interrobang)! Just have added optional support for PiM-Variations too <pre><?php $keepThumbnails = true; $keepPimVariations = true; // Pageimage Manipulator Variations ini_set('max_execution_time', 60 * 5); // 5 minutes, increase as needed include("./index.php"); if($keepPimVariations) { if(!wire('modules')->isInstalled('PageImageManipulator')) { $keepPimVariations = false; } else { // PiM is installed, but is it a version that has method getPimVariations() (Ver 0.1.0 +) $a = wire('modules')->get('PageImageManipulator')->getModuleInfo(); $actual = preg_replace('/(\d)(?=\d)/', '$1.', str_pad("{$a['version']}", 3, "0", STR_PAD_LEFT)); $keepPimVariations = version_compare($actual, '0.1.0', '<') ? false : true; } } $dir = new DirectoryIterator(wire('config')->paths->files); foreach ($dir as $file) { if ($file->isDot() || !$file->isDir()) { continue; } $id = $file->getFilename(); if (!ctype_digit("$id")) { continue; } $page = wire('pages')->get((int) $id); if (!$page->id) { echo "Orphaned directory: " . wire('config')->urls->files . "$id/" . $file->getBasename() . "\n"; continue; } // determine which files are valid for the page $valid = array(); foreach ($page->template->fieldgroup as $field) { if ($field->type instanceof FieldtypeFile) { foreach ($page->get($field->name) as $file) { $valid[] = $file->basename; if ($field->type instanceof FieldtypeImage) { foreach ($file->getVariations() as $f) { $valid[] = $f->basename; } } // keep thumbnails: if ($keepThumbnails && $field->type instanceof FieldtypeCropImage) { $crops = $field->getArray(); $crops = $crops['thumbSetting']; $crops_a = explode("\n", $crops); // ie. thumbname,200,200 (name,width,height) foreach ($crops_a as $crop) { $crop = explode(",", $crop); $prefix = wire('sanitizer')->name($crop[0]); $valid[] = $prefix . "_" . $file->basename; } } // what's about PimVariations ? if ($keepPimVariations) { if ($field->type instanceof FieldtypeImage) { foreach ($file->pimLoad('x',true)->getPimVariations() as $f) { $valid[] = $f->basename; } } } } } } // now find all the files present on the page // identify those that are not part of our $valid array $d = new DirectoryIterator($page->filesManager->path); foreach ($d as $f) { if ($f->isDot() || !$f->isFile()) { continue; } if (!in_array($f->getFilename(), $valid)) { echo "Orphaned file: " . wire('config')->urls->files . "$id/" . $f->getBasename() . "\n"; // #unlink($f->getPathname()); } } wire('pages')->uncache($page); // just in case we need the memory }2 points
-
@hdesigns: See my monolog here: https://github.com/apeisa/Shop-for-ProcessWire/issues/2 And this: https://github.com/apeisa/Shop-for-ProcessWire/pull/4 I'm not sure if apeisa ever receives messages from github...2 points
-
Thanks Ryan, your script works great for me. I just added some lines so my thumbnails from the ThumbnailsModule are also kept: ini_set('max_execution_time', 60 * 5); // 5 minutes, increase as needed include("./index.php"); $dir = new DirectoryIterator(wire('config')->paths->files); foreach ($dir as $file) { if ($file->isDot() || !$file->isDir()) { continue; } $id = $file->getFilename(); if (!ctype_digit("$id")) { continue; } $page = wire('pages')->get((int) $id); if (!$page->id) { echo "Orphaned directory: " . wire('config')->urls->files . "$id/" . $file->getBasename() . "\n"; continue; } // determine which files are valid for the page $valid = array(); foreach ($page->template->fieldgroup as $field) { if ($field->type instanceof FieldtypeFile) { foreach ($page->get($field->name) as $file) { $valid[] = $file->basename; if ($field->type instanceof FieldtypeImage) { foreach ($file->getVariations() as $f) { $valid[] = $f->basename; } } // keep thumbnails: if ($field->type instanceof FieldtypeCropImage) { $crops = $field->getArray(); $crops = $crops['thumbSetting']; $crops_a = explode("\n", $crops); // ie. thumbname,200,200 (name,width,height) foreach ($crops_a as $crop) { $crop = explode(",", $crop); $prefix = wire('sanitizer')->name($crop[0]); $valid[] = $prefix . "_" . $file->basename; } } } } } // now find all the files present on the page // identify those that are not part of our $valid array $d = new DirectoryIterator($page->filesManager->path); foreach ($d as $f) { if ($f->isDot() || !$f->isFile()) { continue; } if (!in_array($f->getFilename(), $valid)) { echo "Orphaned file: " . wire('config')->urls->files . "$id/" . $f->getBasename() . "\n"; // unlink($f->getPathname()); } } wire('pages')->uncache($page); // just in case we need the memory }2 points
-
Is this a question of preference or does Firebug still do something that Chrome dev tools don't and/or do something way better? Asking mostly out of sheer curiosity, as I've dumped FF+Firebug long time ago myself2 points
-
I will throw an interesting option to the pile, and surprisingly you have have it in your computer for sure Chrome dev tools, are very close to become a great IDE while developing localy by using the "workspace" tab on the settings, and I actually managed to make to edit files on my VPS using a sshfs mount. http://www.html5rocks.com/en/tutorials/developertools/revolutions2013/ http://gregrickaby.com/turn-chrome-developer-tools-into-an-ide/ (using the dev version of chrome you don't have to activate the experiment anymore)2 points
-
I sometimes end up with orphaned files as a result of doing mass imports during development. My code won't be quite right the first time around and I'll end up with extra and/or duplicated files. At least that was the case this last week. It was on a pretty large scale, so not something I wanted to clean up manually. Here's how I cleaned them out. Place this in a file in your site root called clean-files.php and then load it in your browser. /clean-files.php <pre><?php ini_set('max_execution_time', 60*5); // 5 minutes, increase as needed include("./index.php"); $dir = new DirectoryIterator(wire('config')->paths->files); foreach($dir as $file) { if($file->isDot() || !$file->isDir()) continue; $id = $file->getFilename(); if(!ctype_digit("$id")) continue; $page = wire('pages')->get((int) $id); if(!$page->id) { echo "Orphaned directory: " . wire('config')->urls->files . "$id/" . $file->getBasename() . "\n"; continue; } // determine which files are valid for the page $valid = array(); foreach($page->template->fieldgroup as $field) { if($field->type instanceof FieldtypeFile) { foreach($page->get($field->name) as $file) { $valid[] = $file->basename; if($field->type instanceof FieldtypeImage) { foreach($file->getVariations() as $f) { $valid[] = $f->basename; } } } } } // now find all the files present on the page // identify those that are not part of our $valid array $d = new DirectoryIterator($page->filesManager->path); foreach($d as $f) { if($f->isDot() || !$f->isFile()) continue; if(!in_array($f->getFilename(), $valid)) { echo "Orphaned file: " . wire('config')->urls->files . "$id/" . $f->getBasename() . "\n"; // unlink($f->getPathname()); } } wire('pages')->uncache($page); // just in case we need the memory } When you can confirm that it has found the right files (and no false positives) uncomment the "unlink" line above to have it remove the files on the next run.2 points
-
Select Multiple Transfer Multi-selection Inputfield module for ProcessWire using the jquery.uix.multiselect plugin by Yanick Rochon. This Inputfield provides similar capabilities to asmSelect but in a very different way. The usage of two separate lists may be more convenient when needing to select a large quantity of items. Like asmSelect, it also includes support for sorting of items. Unlike asmSelect, it has a built-in search field for filtering. It can be used anywhere that the other ProcessWire multi-selection inputfields can be used. Download ZIP file Modules directory page GitHub Class (for auto-install): InputfieldSelectMultipleTransfer Important Installation Notes This module is installed like any other, however you will need to take an extra step in order to make it available for page selection. After installing this module, click to your Modules menu and click the core InputfieldPage module to configure it (Modules > Core > Inputfields > Page). Select InputfieldSelectMultipleTransfer as an allowed Inputfield for Page selection, and save. Now you should be able to select it as the Inputfield when editing a Page reference field. For obvious reasons, this Inputfield would only be useful for a Page reference field used to store multiple references. (Note that this video is showing this module in combination with field dependencies and dependent selects (something else brewing for 2.4 but not yet committed to dev).1 point
-
ProcessWire Site Profile Using Zurb Foundation 4 This is a drop-in replacement for the default ProcessWire site profile. See the live demo at: http://processwire.com/foundation/ It is mobile-first and fully responsive, capturing all the benefits of Zurb Foundation 4. Ready to be expanded upon with built-in support for deeper levels of navigation nesting in the sidebar. Pagination ready with Foundation-specific pagination output, when/if you want it. Improved search engine, relative to the basic profile. Library of Foundation-specific markup generation functions included, primary for generation of navigation (in _nav.php). Uses ProcessWire 2.3+ prepend/append template file settings making it easy to work with. It is largely stock Foundation 4 in terms of look and feel, with a few tweaks. To Install Download this profile from GitHub or mods.pw/4u. Start with a copy of ProcessWire 2.3 or newer, and its default site profile. If starting with an uninstalled copy of ProcessWire Replace the /site-default/templates/ directory with the templates directory from this profile. Replace the /site-default/config.php file with the config.php file from this profile. Run the ProcessWire installer. If starting with an already-installed copy of ProcessWire Replace the /site/templates/ directory with the templates directory from this profile. Add the following two lines to your /site/config.php file: $config->prependTemplateFile = '_init.php'; $config->appendTemplateFile = '_main.php'; Desktop Screenshot Mobile Screenshot1 point
-
Well that was a quick answer! I trust your experience and follow the advice. If I can handle thousands of events, I guess I'll have more than enough! Thanks a lot!1 point
-
What about doing it in css instead of a php function? .post { border-bottom: 1px solid #ccc; } .post:last-child { border-bottom: none; } Isn't that much much easier?1 point
-
So you would have http://domain.com/home as a page too? Especially from a SEO POV/structural thinking I would argue that having a homepage at "/" is the way to go. It is the parent/grandparent of all your pages. This made a lot of sense from when I started using ProcessWire. Other cms'es tend to let you create a homepage which is whatever page. It may seem rigid, but you get a lot of freedom when settling with one root. In a multisite I could see other roots as well, but when dealing with a one-site hierarchy I love the way PW dictates the overal structure, but within that "/" you can do anything you want. http://domain.com/ http://domain.com/about-us/ http://domain.com/about-us/history/ Seems very clear, readable and supernice to me1 point
-
Hm, I guess the horizontal scrollbar appears because of the borders from the input fields. There is one way of correcting the box-model that I actually enjoy using, especially for working with percentages http://www.paulirish.com/2012/box-sizing-border-box-ftw/ /* apply a natural box layout model to all elements */ *, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } That small snippet in the top of main.css would fix the problem, and allow to use overflow:auto1 point
-
1 point
-
1 point
-
In some tests, I was getting the same error (Page 1001 is not valid for select_page) with other Page Multiple fields select types, not just this new module. The issue (I can't find the thread atm), was connected to the template custom selector. IIRC, it was an issue about the status of the pages you want to select via the Page Select. Are they published? are they hidden? etc. Try with a normal page and see if it works. This module has worked for me in dev version as long as those pages are published, not hidden, etc. I hope this makes sense; typed quickly Edit 1: The forum discussion I referred to is here: http://processwire.com/talk/topic/4222-custom-field-to-select-unpublished-pages-selectable-but-doesnt-save-selection/ You also contributed to that discussion . Ryan was supposed to fix this and suggested a change (see his post in that thread). I don't know if he merged the changes Edit 2: Hmm. I have tested with a "normal" page and I still get the error. Am confused1 point
-
Thanks apeisa! As a little gift to the community I translated this module to german. So if someone can use it feel free to do so! shop-for-pw_translation-de.zip1 point
-
1 point
-
There's a "record" button for this at the bottom of Network panel, labeled "Preserve Log upon Navigation." Anyway, I definitely get what you're saying -- it's pretty much the same for me whenever I try to use Firebug these days. Most of the time both tools seem to do similar things, they're just organized differently. If you're a hardcore JS developer Chrome dev tools has stronger toolbox for you, but otherwise it won't really matter that much @Soma: agreed, speed was definitely a big factor for me when switching to Chrome in the first place. Generally speaking it just seems to function much faster and it's UI is super simple and uncluttered. Can't say anything about FF dev tools, except that the 3D view is absolutely hilarious.. useless (at least from my point of view) but very fun. Looks like FF devs are focusing on some very important stuff there1 point
-
haha. I do get them. it's other discussion how fast I forget about them... Just looked the pr and it seems to be safe merge.1 point
-
This would work: $out = "<p class='summary'>{$tp->summary}</p> <hr/>"; $out = rtrim($out , "<hr/>" ); If you remove the space in the "<hr />" and the space before the " <hr/>" in the trim it works. Keep in mind, rtrim removes chars and not tags/strings, so what you specify in the second argument is actually a chars list and not a string to be removed. Also if doing this way, a space after </p> is required to make it work also. Better stick with other methods in this case.1 point
-
Kongondo, I think this could change your mind http://processwire.com/talk/topic/3122-chrome-dev-tools-tuts/1 point
-
This should work: foreach ($tps as $tp) { $out .= "<p class='title'><a href='{$tp->url}'>{$tp->title}</a></p>"; $out .= "<p class='summary'>{$tp->summary}</p> "; $out .= $p === $tps->last() ? "<hr />" : ""; // oops, see corrections on next post }1 point
-
Yes, you're right. Run default admin theme but the problem can be overflow-y: auto; overflow-x: hidden; in wire/templates-admin/styles/inputfields.css due to new Inputfield Dependencies.1 point
-
I had the need of iterating through a lot (and I mean A LOT) of pages by template, and was also having memory problems. With this amount of pages it was becoming really annoying to do it few at a time, so I came up with a solution that doesn't need a wireArray. With this I could iterate over more than 50.000 pages with the same template on a website with more than 100.000 pages by bootstrapping PW from the command line. I just had to set a time bigger limit to PHP with set_time_limit(), and everything went fine and without interruptions. while (1) { $p = wire('pages')->get("template=my_template, id>$id"); // get page with id bigger than previous if(!$id = $p->id) break; // assign current page's id to $id or break the loop if it doesn't exist // do stuff using $p as the current page wire('pages')->uncacheAll(); // clean the memory (with $p->uncache() doesn't work. why?) }; edit: actually, using the command line I don't think set_time_limit() is even needed.1 point
-
I'm also a fan of the simple PW layout... without sidebar. On the other side: yes, the look and feel of the default admin theme needs a refreshment. Phillips design demo above looks very very good. Also the idea for simple changing the colorschemes is nice. 3 colors (like above black, blue, green) is enough I think. More should be done via themes. In the moment I mostly use Soma's Teflon-2 theme. It's well done, complete and looks serious (for most people). My second favourite is the Unify theme. Has very nice fresh colors. But there a still some missing translation strings? Unify could imho be a good starting point for a new PW default admin theme.1 point
-
Reviving this old thread. Luckily, since I'm only getting into PHP now, by going straight to OOP, I've not really had to unlearn some procedural PHP in order to grasp OOP. I found the following helpful: http://net.tutsplus.com/tutorials/php/object-oriented-php-for-beginners/ http://www.tutorialspoint.com/php/php_object_oriented.htm http://phpro.org/tutorials/Object-Oriented-Programming-with-PHP.html http://www.codewalkers.com/c/a/Programming-Basics/ObjectOriented-PHP-Fields-Properties-and-Methods/ http://www.massassi.com/php/articles/classes/ http://net.tutsplus.com/tutorials/php/from-procedural-to-object-oriented-php/ http://net.tutsplus.com/tutorials/php/real-world-oop-with-php-and-mysql/ PHP Academy tuts - videos1 point
-
Few things: you probably don't need "All players" page at all - why not use "Players" page for that information? So what you need is way to update one player or multiple player with same task. One thing to note: - I would add one more level under player. Let's call that template "event". Event could be something like "8.9.2013 14:50 player accomplished task 3". Which would go under certain player(s). That way you can have history how and when player has done something. Those events doesn't have to be tied to tasks, this way you get freedom to add custom events, like "Tom did great job helping others today. +5exp". These events would always add or substract to players stats.1 point
-
Nice job Soma. I've actually had the same issue with TinyMCE and I don't even use templates. When using the <pre> format, if it's the last thing in the document, there's no way to add something after it. For example, if I'm editing the processwire.com site and adding a code example, suddenly I can't continue with anything after that. So I have to open up the HTML modal and add a <p>...</p> manually. It sounds like your plugin would fix this issue too.1 point
-
I think that PW would be a great fit for this. Obviously you're thinking about the big picture - which is great so that you know what kind of structure makes the most sense even if you start with only a part of it and add features as you go, like apeisa said. I saw a post yesterday about using HandsOnTable with Processwire and it seems like it can solve the issue with needing to add/delete points efficiently: http://processwire.com/talk/topic/4147-excel-like-crud-in-pw-using-handsontable/ Watching the screencast helps to show the power behind it. Your project sounds great and I'm sure your students will love it!1 point
-
Hello All, I am Senthilkumar, Technical Author from www.unixmen.com website. Recently i installed and tested ProcessWire On CentOS 6.4. It's worked for me at present. I would like to share the how-to document in ProcessWire Forum. Hope it will useful for ProcessWire users. Here is the link: Install ProcessWire CMS Using LAMP Server On CentOS 6.4 Regards, SK.1 point
-
In my tests (although a little long session with forth and back) it was not working even without any modification to current page names module. The problem really is the repeater here. Without any repeater it works. But I tried and came of with a much simpler solution to yours, but not sure it would be really the way. You were using a temp property set to the page before saving and reading it after which I think is strange as I would think this value would may introduce other effects? Also you used $user instead of $this->user, however I removed you code and commented. Here's the current version I have. LanguageSupportPageNames.module And I tested in template with something like this: echo "user lang before: $user->language<br/>"; /* to create a page */ $p = new Page(); $p->template = "basic-page"; $p->parent = "/"; $p->of(false); /* to edit a page */ // $p = $pages->get(2179); // echo "page title: $p->title<br/>"; $p->of(false); $n = rand(1,100); foreach($languages as $lang) { // $id = $lang->isDefault() ? '' : $lang->id; // $p->set("status$id",1); $user->language = $lang; $p->set("title", "{$n}_titleofpage_lang_{$lang->id}"); } $pages->save($p); echo "page saved '$p->name'<br/>"; echo "user lang after: $user->language<br/>";1 point
-
Hani, ProcessWire will scale pretty infinitely in terms of pages, but not in terms of fields or templates. The same can be said of databases in general–you can have millions of rows in a table, but probably don't want millions of tables. I would say you've gone beyond what may be practical for long term use and maintenance of the site. At least, I have never tested ProcessWire with any more than 200 fields (and I thought that was an insane amount). I would be curious why so many fields are necessary? It might be good for us to get a list of all the fields, which may lead to some good suggestions on alternatives. But this is a situation where I think you might really benefit from making your own Fieldtype and Inputfield combinations. It is surprisingly simple to do, and can represent any DB table, no matter how many columns it needs. There is far less overhead in having a custom Fieldtype that represents a table with 100 columns, than there is in having 100 separate fields. Have a look at Adrian's new FieldtypePhone/InputfieldPhone module for a good example of how to represent a DB table with a Fieldtype. Some other options I can think of relate to ProFields, a pack of modules I've been working on to release soon (probably as commercially supported like FormBuilder and ProCache). It includes FieldtypeMultipler, FieldtypeTable, FieldtypeTextArray and FieldtypeTextareas, among others. These enable you to have a single field that can to represent any quantity of inputs. Though they all do it in a little bit different ways. FieldtypeMultiplier lets you take any other Fieldtype (that isn't already multi-value) and turn it into a multi-value field. FieldtypeTable is a multi-value compound type that lets you keep a user-defined combination of fields contained in a group… not quite as powerful as a repeater, but it's only 1 field and has far less overhead. FieldtypeTextArray lets you have a defined quantity of inputs for any text field… like say you needed a field to represent 3 email addresses, for instance. Lastly, FieldtypeTextareas lets you have 1 field that can represent any number of named textareas while having them all be searchable from the same field. For example, you could have a single field called "content" that contains separate inputs for body, sidebar, summary and about_the_author or something like that, but they only consume 1 field, accessed via $page->content->body, $page->content->sidebar, etc. All of these Fieldtypes/Inputfields are aimed at really reducing the overall quantity of fields necessary to represent lots of data. I developed this set because I had a site with lots of similar fields, and this group of modules helped me to reduce the quantity of fields by more than 70%. However, these aren't ready for production use, so it may be a little while before I have them ready. But if you'd be interested in helping to beta test them, your use case might be about perfect.1 point
-
I've just updated the profile exporter module to display a note about the incompatibility when it detects the multli-language page names or fields modules installed.1 point
-
The basics of programming I learned from Filemaker Pro. (That sounds weird) 13 years ago I started as freelance Scaffolder in in the stage building business. On that time, I really messed up my book keepings and I needed a simple but effective Invoice system. In that time I build occasionally websites with pure HTML, wished to use some PHP, but couldn't wrap my mind around it. Then I found Filemaker. I start building the system and came across a totally new terrain for me (programming). I came across database relations and I really needed to script it. The if statements and database relations pilled up, but at the end I had a simple and effective Invoice system. This is where I learned some basics of scripting, after that my mind was set, and I could start with PHP.1 point
-
Brendon - was going to say I hadn't noticed any issues but glad it's not an issue anyway. When testing I'd used webmail like Gmail, as well as self-hosted webmail RoundCube and finally Outlook. I've not tried every combination of email program though as there are too many variations as you say. In an ideal world, someone would invent "Email 2.0" to fix non-standard formats and banish spam forever somehow, but until then we're stuck with non-standard programs all doing slightly different things1 point
-
Hey all, Here's a demo of what I've built. It's become my primary bookmarking system: I didn't demonstrate it in the video, but this system works amazingly on a mobile device too. It's so easy and quick to pull up stuff I want to read when at a coffee shop or have a few minutes to kill when on the go. I found Diigo's Android App very limiting in comparison, especially since it doesn't allow you to view all of your bookmarks on the mobile app (last time I checked). I have no plans as of yet to release this, but I may in the near future if you are all really interested. There are features I still want to build out as well as a lot of code cleanup and security measures that need to be implemented. Enjoy! Jonathan1 point
-
Sounds awesome guys, thanks god I didn't go far in developing my site on Drupal, it feels just too cubersome...1 point
-
Here is a revised version of the module. It accepts all Page::status options, eg. $form->pagestatus = Page::statusUnpublished; $form->pagestatus = Page::statusHidden; If left blank, then the page will be published. Not sure if this is really an ideal default. Maybe it would be good to get some input from others on this. FormTemplateProcessor.module1 point
-
My twitter wall doesn't stop showing me nice things to link to http://discover-devtools.codeschool.com/ I watched the first two videos and, even if they are very basic, I already learned something that wasn't aware of.1 point
-
See Wanze's ProcessBatcher module, I think that would be helpful to you: http://processwire.com/talk/topic/2811-processbatcher/1 point
-
I respect Drupal, but strongly dislike using and developing in it. This comes from a couple years of developing sites in it. The problems with Drupal have certainly been a motivation in making ProcessWire happen. Out of the box, ProcessWire is going to be a lot better at the large scale than Drupal. ProcessWire's architecture, foundation and API are far better than Drupal (captain obvious). People may use Drupal at large scale, but I don't believe the product itself was ever truly designed for it. Like with WordPress, being used at the large scale is something that happend to Drupal rather than something it made happen. Drupal is a pig that people have affixed wings to because there wasn't any other way to do it at the time. You see similar things happen with the other big platforms (WordPress, Joomla). As far as pigs go, Drupal is a good one. There are some things to respect (though not necessarily agree with) about Drupal's roots and the original thinking behind it. There's no doubt that it is far better than Joomla, for anyone that cares about this stuff. Beyond that, where it excels is in all the 3rd party stuff written for it, to do just about anything. It's a diesel-powered cuisinart in that respect… whatever you need to blend, it will blend… but it'll be messy. Working at large scale, 3rd parties have built all kinds of caching, CDN and load shifting things to throw on top the pile (and likewise with WordPress). Even a pig can fly if you strap wings on to it. And Drupal has a lot of folks thoroughly invested in it to the point where they are making that pig fly. Drupal is also such a household name that it represents a low-risk position for decision makers (low risk of job loss from choosing Drupal). None of this makes it a good product, just a safe one for people that don't know any better. But for people that do know the difference, we want a panther, not a pig.1 point