Leaderboard
Popular Content
Showing content with the highest reputation on 09/06/2012 in all areas
-
6 points
-
http://www.globi.ca/ built with Processwire (of course), HTML KickStart jQuery Includes tonnes of functionality: Site maps, rss, blog & categories, portfolios, images, user profiles, permissions & private sections! This would have been a mess with anything but PW.5 points
-
Hello to all, Here is our travel site running Processwire: Lentovertailu.fi We use custom javascript+php code for comparison script and it works well in the template header. The articles use automatic resizing of images which helps a lot. Maintaining the site is effortless and the CMS offers a great base for expanding the site later. I recommend Processwire for my customers too.5 points
-
http://ironwood.ca/ Another Processwire & HTML KickStart website. The clients did all the content with ease. Awesome Project. PW saved my life again! Even includes a mobile page editable in PW.3 points
-
If not defined it will take the default. Default is english in PW. If you set something in config.php doesn't make it the default as it doesn't have language context there, anyway it will get overwritten by the PW language functions. You can the locale in the translation file ProcessLanguage.module for the particular language, which makes sense. Thank you for updating it! Yes that should be ok.2 points
-
I wanted to give you a little preview of a new module I've been working on recently: the Form Builder module. This module lets you create simple-to-complex forms and place them in your site without any need for development. In this video we show how we can create, publish and test a simple contact form in less than 5 minutes. Then we take a quick look at a more complex form (already produced). I recommend viewing the full screen + HD 720p version so that you can see it more clearly than in this small forum embed. (note: there's no sound, so no need to adjust your volume) More about the Form Builder The Form Builder has many options for the developer to customize output and create their own themes, markup, etc. But the goal here was to build something that could enable you (or your client) to publish a form in less than 5 minutes, so that's the focus of this video. This tool is literally easy enough for your clients to create and manage their own forms. Or from a developers perspective, it takes something that used to consume hours and makes it happen in minutes. Form results save in the database and optionally can be CC'd to you by email. Result entries and be viewed, filtered by date, and even edited in the admin. You can export results to a spreadsheet as well. I'm working on the ability to export to pages, though that isn't quite ready yet. How the Form Builder will be licensed This module will be individually licensed on a per-site basis for a small license fee. It will also be available for free personal use to established forum members. Basically, I want to see if I can substitute some of my client work to focus on ProcessWire instead. And in order to do that, I need to have an income (I have a family to support). So I thought that building a special tool like this would be a way to make a go of it. A lot of you have asked to make donations to the ProcessWire project, and while we still won't be able to take donations, you will be able to support the ProcessWire project by purchasing and using the Form Builder in your own client projects. So a lot of motivation for this module came from wanting to provide something really special for all that had wanted to support ProcessWire. After a few months of work, I'm pretty happy with how this module has turned out -- it's already saved me tons of time in my client projects. So I'm thinking and hoping you guys will really like it too. I look forward to your feedback.1 point
-
You can do it in tinyMCE. Just add a link normally, and choose the option "link to page" on the dialog1 point
-
Hello. I just started reading through the info here. I'm a beginner at php but am comfortable with Wordpress and writing some easy custom code. I have a client (construction) that I'm developing a site for - started out as a static site but it is expanding. They are thinking they might need a login for each of their clients so they can have running discussions about projects. I think I could do this in Wordpress - but I don't want to do that. I'd like to develop it in Processwire. Has anyone done anything like this? An initial idea I had was to have a client login area that would direct the client to their own protected sub-domain. Then I think it would be a simple matter of posting project updates and enabling comments on each page. Doable with Processwire? Thank you. Aaron1 point
-
When possible, use IDs (integers) for referring to pages in forms. Then your sanitization is as simple as this: $area_alias = (int) $input->get->area; There's a problem with this code segment: $area_alias = $sanitizer->text($input->get->area); Someone could inject more selectors into the string by specifying it in the URL for area_alias. The text() sanitizer isn't meant to sanitize strings for use in a selector. Instead, you'd want to use the selectorValue sanitizer: $area_alias = $sanitizer->selectorValue($input->get->area); But like mentioned at the beginning, I prefer to use integers (IDs) for anything referencing pages, since it makes the sanitization simple and bulletproof.1 point
-
Great site! I like that WordPress vs. ProcessWire article they have too.1 point
-
1 point
-
$area_alias = $sanitizer->text($input->get->area); $area_page = $pages->get("alias=$area_alias"); $matches = $pages->find("title|body|sidebar*=$q, parent=/catalogo/produtos/, arealimit=50, id!=1, area=$area_page"); I think this is what you want, but I'm not sure. Tell me if I misunderstood everything. EDIT: See Ryan's corrections to my code some posts below1 point
-
Great sites Joshua. I have to admit though I'd be a little afraid of a dentist named "Shackleton":1 point
-
This looks great, and I hope it’s a big success - I will gladly pay a good price for this. I was actually just playing with the previous experimental "Form Template Processor" module you released, so this is great timing. The scenario I am looking to build is a community site that accepts new events - If the user is logged in (via Standard login / Facebook or Twitter) they can add new events (date, location, category). So I would be interested in being able to save form entries to a page. Is this is scenario where you would recommend using the new Form Builder? Or as they will be logged in should I just give them access to the main PW admin area? sending mail one of my main concerns with building web forms for clients is the reliability of sending emails - not all hosts are equal - some host have no way to send email, or have unreliable / poorly implemented mail send. I consider any client website form as business critical, so I want to make sure that the emails are being delivered. This is one of the main reasons I use Wufoo.com for most all my clients website forms (as well as the other advantages you mentioned with this module - the speed of creating a form, the spam protection, the database logging of all entries and ability to export.) Maybe the ability to use a full email account (imap / pop3) for sending? Or the option to use a mail sending service like Postmakapp.com, Amazon SES, Sendgrid.com, Mandrill.com… Just to clarify - - You can use any field type within processwire, including page types and custom fields? - You will have full control over the markup? For future ideas, one of the really cool things I like about Wufoo are the integrations with other services - for example allowing a user to be added to a mailing list on campaign monitor / mail chimp when using a contact form. I’m sure this is something that could be easily done with PW. Thanks!1 point
-
These are icons sets collected through webresourcesdepot.com: http://typicons.com/ http://iconmonstr.com/ http://brankic1979.com/icons/ http://www.jigsoaricons.com/ http://blog.twg.ca/2009/09/free-iphone-toolbar-icons/ http://www.iconshock.com/android-icons/?prd=affcomm63789 http://www.smashingmagazine.com/2011/12/29/freebie-free-vector-web-icons-91-icons/ http://365psd.com/day/2-209/ http://salleedesign.com/resources/mimi-glyphs/ http://www.justbenicestudio.com/studio/websymbols/ http://www.designshock.com/google-plus-interface-icons/ http://picons.me/download-social.php http://www.yay.se/resources/android-native-icons http://blog.roamdesign.co.uk/?p=2721 point
-
Because i use Twitter Bootstrap for some things i'm working on i really like the icon font Font Awesome for web related icons. I guess it can also be used outside of a Bootstrap.1 point
-
What I would do is set up a page called Client Area or something like that, and then for each child page immediately below that use a Page fieldtype that allows you to select the user that can access that page. This way, in the Client Area page itself you can restrict it to only show pages for a specific logged-in user and stick the rest of their content under the relevant page. I would have a custom login form on the Client Area page that then simply redirects them to the right child page on successful login. It would also have some logic so that they can't jus force their way into another user's content. It does depend a bit on the structure you want to give for each user but the sky's the limit with ProcessWire. I can't go into more detail as I'm typing this on my phone, but that is one option that would be relatively straightforward if someone else comes along and fills in some of the blanks (I'm sure someone will, they're good like that).1 point
-
I've been using a lot of icon fonts lately, http://fontello.com/ is just perfect for that. Other than that, I've always adored Paul Robert Lloyd's social media icons, also because of the amount of services it covers. A lot of social icons sets look great but only have icons for a few services. Not this one.1 point
-
Another small site relaunched with PW. It's a local one-man event management business. http://www.kreativkonkret.de "Non-design", which the client prefers. HTML5, responsive, using a customized Google Map as well as a (rather well hidden) customized lightbox. The home page is supposed to always fetch the next upcoming event from the events page ("Veranstaltungen") if event dates are entered properly (and if I didn't screw up the template logic for that). Also, this is the first live site in which I've used Pete's Minify module to deliver minified and concatenated CSS and JS.1 point
-
Very uncommon compared to what a dentist's web site would likely look like in Germany, which is why I like it.1 point
-
Done. I assume it's fine to just leave the sortable date format untranslated then?1 point
-
1 point
-
1 point
-
This is totally something you could do with PW. Actually managing permissions can be pretty easy depending on how you want to set up your site. Have you looked at this: http://processwire.com/api/user-access/ You have a lot of options. Sometimes I set permissions in the backend for different people to have access to edit different sections of the website... sometimes I create interfaces in the frontend that allow different groups to add/manage content. I could help with some examples... need to know a bit more about your project. But IMO PW would be my first choice for this type of functionality.1 point
-
http://icomoon.io/ is super awesome for an icon font. Also includes the vectors. I use this all the time. http://www.famfamfam.com/lab/icons/ Rocks the casbah too. http://iconkits.com/ I have purchased a few sets from these guys http://somerandomdude.com/work/bitcons/ - awesome smallness http://somerandomdude.com/work/iconic/ - graphics ,vectors, and fonts http://www.yummygum.nl - Iconsweets & iconsweets2 psds and dont forget the noun project: http://thenounproject.com/1 point
-
Also wanted to add that.. When hooking after a render method of some class, $event->return returns the markup string that's getting rendered. You then can modify it in some way using string functions. But you actually don't need to do a "return $event->return;" at the end. Simply adding or modifying $event->return will do the magic. $event->return .= "som code"; //or $event->return = str_replace("</body>","<p>Hello</p></body>",$event->return); Hooking before a Page::render will give you chance to get the page object and do modifications, whatever.. but it will not have the markup yet. So $event->return is not of much use there as it will get overwritten.1 point
-
Actually, that's not a review--that's our marketing copy. Looks like they copied and pasted it from these two pages: http://processwire.com/about/what/ http://processwire.com/about/why/ We allow this usage with our press releases, but not with our site copy. The ProcessWire site copy is not open source, so whoever posted this should have asked for permission before doing so.1 point
-
This value can be edited in the backend. revert your changes in the module and goto setup/languages and edit your german pack. Click the "translate new file" link at the bottom of the page and use this path: /wire/modules/LanguageSupport/LanguageSupport.module Now you can edit the locale. Hope this helps. I think the LanguageSupport files should be added to the german language pack too..1 point
-
Thanks, but we found it's the memory was to 32mb, moving up did the trick.1 point
-
1 point
-
This is a fun question to answer, so thanks for asking it. It really gets down to much of the motivation behind the system. For me it really comes down to time. Time is the most important thing to me. I'm getting old and need to focus on the things that give me more time, and that's what it's all geared around. For others, it's money. But time is money. Either way, you have to ask: "what is saving me time?" That's all you need to know to answer the question. But here's the long version: How much time does it save you to use a template engine vs. PHP API? I would suggest that using a template engine saves you zero time (maybe even costs time) vs. using a clean PHP API like in ProcessWire. Ultimately you are just typing different characters with a template engine, in about the same quantity, to do the same thing (example). Nor is a template engine performing any heavy logic, thinking or processing behind the scenes… it's mainly just substituting one thing for another. It's not saving you any time or mental/logical energy. It's this whole abstraction layer taking up space that isn't contributing anything to the bottom line. So the benefits of a template engine aren't very clear, relative to using something like ProcessWire's API. And I don't think it matters whether you know PHP or not, as the learning curve is identical between PHP and a template engine, for accomplishing the same things. The only difference is that PHP will go much farther, when/if you want it to. Then look at the amount of time it would take you to construct raw DB queries (or through some abstraction layer like ActiveRecord). A simple selector that you write in a few seconds translates to a rather long and complicated SQL query that might have taken quite some time to create and optimize manually. Whether in ProcessWire or somewhere else, to create the SQL query, you would have had to maintain internal knowledge of the database, tables involved, indexes, left and right joins, orders, grouping, limits, security and much more… So I would suggest that ProcessWire's selector syntax is saving HUGE amounts of time (and thus cost) by abstracting away a whole lot of technical details and optimization. At the same time, it's part of a larger system that has also abstracted away the complexities of DB design and optimization, and brought it all into the context and thinking of a website. You don't need to know anything about databases or indexes, or that they even exist. I would also suggest that ProcessWire gives one the impression that they can easily pluck data from anywhere in their site as if it was already in memory… and in the context of a website, not a database. In terms of time and cost savings, is there any comparison between this and a template engine?1 point
-
Sure. I'll put it to github soon. We have few ideas to develop it further. Things like bringing more user details like email, but most importantly map ad groups to roles.1 point
-
I tested this in one project and it works great! I implemented the WillyC improvements and added the Session prefix to the name. Code is here: <?php class SessionLdapAuth extends WireData implements Module, ConfigurableModule { public static function getModuleInfo() { return array( "title" => "LDAP Authentication", "version" => 100, "summary" => "Allows uses to be authenticated via LDAP", "permanent" => false, "singular" => true, "autoload" => true ); } public function init() { $this->session->addHookAfter('login', $this, 'login'); } public function login($event) { if ($event->return) return; // they are already in $name = $event->arguments[0]; $pass = $event->arguments[1]; $conn = ldap_connect($this->data['host']); if ($conn) { $bind = @ldap_bind($conn, "$name@{$this->data['accountDomainName']}", $pass); if ($bind) { // success // check if they area lready a user in PW $user = wire('users')->get("name=$name"); if($user->id) { $user->pass = $pass; if($user->isChanged('pass')) $user->save(); $user = wire('session')->login($name, $pass); $event->return = $user; return; } else { // create a new user $user = wire('users')->add($name); $user->pass = $pass; $user->addRole('guest'); $user->save(); wire('users')->setCurrentUser($user); $event->return = $user; return; } } else { // fail $event->return = null; return; } } else { // could not connect throw new WireException($this->_('Could not connect to LDAP')); } } static public function getModuleConfigInputfields(array $data) { $inputfields = new InputfieldWrapper(); $field = wire('modules')->get('InputfieldText'); $field->attr('name', 'host'); $field->label = 'Host'; if (isset($data['host'])) $field->attr('value', $data['host']); $field->description = 'The LDAP server hostname'; $inputfields->append($field); $field = wire('modules')->get('InputfieldText'); $field->attr('name', 'accountDomainName'); $field->label = 'Account Domain Name'; if (isset($data['accountDomainName'])) $field->attr('value', $data['accountDomainName']); $field->description = 'The LDAP server domain'; $inputfields->append($field); $field = wire('modules')->get('InputfieldText'); $field->attr('name', 'accountDomainNameShort'); $field->label = 'LDAP server domain (short)'; if (isset($data['accountDomainNameShort'])) $field->attr('value', $data['accountDomainNameShort']); $field->description = 'The LDAP server hostname'; $inputfields->append($field); $field = wire('modules')->get('InputfieldText'); $field->attr('name', 'baseDn'); $field->label = 'Base DN'; if (isset($data['baseDn'])) $field->attr('value', $data['baseDn']); $field->description = 'The LDAP server DN'; $inputfields->append($field); $field = wire('modules')->get('InputfieldCheckbox'); $field->attr('name', 'startTls'); $field->label = 'Use TLS'; $field->attr('value', 1); if (isset($data['startTls'])) { if ($data['startTls']) $field->attr('checked', true); } $field->description = 'Check this option to enable TLS security'; $inputfields->append($field); return $inputfields; } }1 point
-
Here is the first release version of the Blog Profile! http://modules.proce...s/blog-profile/ It is now up on GitHub as well: https://github.com/r...ign/BlogProfile Below is a lot more talk about this blog profile and how it works, but if you just want to install the profile and test it, it's not necessary to read anything further unless you want to. I've simplified this a lot from where it's been. It does all the same stuff on the front-end, but the code behind the site is no longer a huge departure from the basic profile. I've rebuilt this profile 3 times trying to find the right balance between making it as flexible as possible and making it as easy to understand as possible. I think it's got a better balance now than before. It's now at a point where it does everything it always has, but the template code behind it should be a lot more accessible and easy to understand. There is no longer a separate module or API variable. Everything here just happens in /site/templates/ files. Consistent with making it simpler, I've also removed the drag-n-drop theme support. While it was cool to have, it always felt a little dirty introducing some kind of proprietary theme support that was so different from the way I'd build any other site. This thing is pretty darn simple to theme as it is (just edit a CSS file). Maybe we'll take it further in the future, but we don't have many PW site profiles out there right now (1 or 2?) and so I decided this profile needed to stay more accessible on the back-end. How the template files work In ProcessWire there are any number of ways you can use your template files. In this case, we are using our template files (in /site/templates/) to populate 3 variables ($content, $headline and $subnav) and then including an HTML file (main.inc) to output them in the right places. The $content variable represents the center (body) column, the $headline variable represents the text headline of the page, and the $subnav variable represents the navigation that appears in the left sidebar. Once one or more of these variables is populated, the template file includes the /site/templates/main.inc file. That main.inc file is just a big HTML file that outputs the $content, $headline and $subnav variables in the right places. We've made an attempt here to separate most of the logic used in the template files from the output. Most of the markup is generated from files in /site/templates/markup/. These files are included from the template files to output specific things like a blog post, comment, etc. Because a lot of output needs are similar among the various template files, we've created a file called /site/templates/blog.inc that has a few shared functions in it. If you look in any of the template files, you'll see that most of them include blog.inc as the first thing. This blog.inc file also initializes our $content, $headline and $subnav variables, mentioned earlier. Outline of /site/templates/ with this profile /site/templates/blog.inc Shared blog-specific functions included by most site templates. /site/templates/main.inc The main HTML markup file through which everything is output. /site/templates/markup/ Contains PHP files that generate markup for specific things like posts, comments, etc. This is separated from the site templates to make it simpler for you to modify the markup if you want to. This is primarily used by the blog.inc functions, but also included by a couple templates as well. /site/templates/skeleton/ This is the Skeleton CSS framework. It is identical to the one they distribute except we added a wider viewport to it. You probably wouldn't have much need to edit anything in here. /site/templates/styles/ Stylesheets used by the blog profile. The most useful one in here would probably be theme.css, which contains all the color definitions for the profile. /site/templates/scripts/ Javascript files used by the blog profile. Not much is happening in here at present.1 point
-
<?php class LdapAuth extends WireData implements Module, ConfigurableModule { public static function getModuleInfo() { return array( "title" => "LDAP Authentication", "version" => 100, "summary" => "Allows uses to be authenticated via LDAP", "permanent" => false, "singular" => true, "autoload" => true ); } public function init() { $this->session->addHookAfter('login', $this, 'login'); } public function ___login($event) { if ($event->return) return; // they are already in $name = $event->arguments[0]; $pass = $event->arguments[1]; $conn = ldap_connect($this->data['host']); if ($conn) { $bind = @ldap_bind($conn, "$name@{$this->data['accountDomainName']}", $pass); if ($bind) { // success // check if they area lready a user in PW $user = wire('users')->get("name=$name"); if (!$user instanceof NullPage) { // update login info $user->pass = $pass; $user->save(); $user = wire('session')->login($name, $pass); $event->return = $user; return; } else { // create a new user $guest = wire('users')->getGuestUser(); $user = new User(); $user->parent = $guest->parent; $user->name = $name; $user->pass = $pass; $user->addRole("guest"); $user->save(); $user = wire('session')->login($name, $pass); $event->return = $user; return; } } else { // fail $event->return = null; return; } } else { // could not connect throw new Exception("Could not connect to LDAP"); } } static public function getModuleConfigInputfields(array $data) { $inputfields = new InputfieldWrapper(); $field = Wire::getFuel('modules')->get('InputfieldText'); $field->attr('name', 'host'); $field->label = 'Host'; if (isset($data['host'])) $field->attr('value', $data['host']); $field->description = 'The LDAP server hostname'; $inputfields->append($field); $field = Wire::getFuel('modules')->get('InputfieldText'); $field->attr('name', 'accountDomainName'); $field->label = 'Account Domain Name'; if (isset($data['accountDomainName'])) $field->attr('value', $data['accountDomainName']); $field->description = 'The LDAP server domain'; $inputfields->append($field); $field = Wire::getFuel('modules')->get('InputfieldText'); $field->attr('name', 'accountDomainNameShort'); $field->label = 'LDAP server domain (short)'; if (isset($data['accountDomainNameShort'])) $field->attr('value', $data['accountDomainNameShort']); $field->description = 'The LDAP server hostname'; $inputfields->append($field); $field = Wire::getFuel('modules')->get('InputfieldText'); $field->attr('name', 'baseDn'); $field->label = 'Base DN'; if (isset($data['baseDn'])) $field->attr('value', $data['baseDn']); $field->description = 'The LDAP server DN'; $inputfields->append($field); $field = Wire::getFuel('modules')->get('InputfieldCheckbox'); $field->attr('name', 'startTls'); $field->label = 'Use TLS'; $field->attr('value', 1); if (isset($data['startTls'])) { if ($data['startTls']) $field->attr('checked', true); } $field->description = 'Check this option to enable TLS security'; $inputfields->append($field); return $inputfields; } }1 point