Leaderboard
Popular Content
Showing content with the highest reputation on 01/29/2015 in all areas
-
Alwaystrynewthingsandgetbetteroralwayadothesameandstaygood.10 points
-
I just migrated three of my projects from MODx Evolution to Processwire. The sites itself are not that spectacular but I am a little bit proud that writing a migration script with PW is so damn easy! So I just wanted to share some thoughts how I realized it. Since the projects are very small and have only a few templates and fields it was very easy to set up templates and fields for these three in the PW admin interface (btw: I really like the possibility to export and import fields via the admin!). Template files were more or less a simple copy paste from the MODx backend to the PW templates files. After transforming the MODx placeholders and all that MODx related stuff in "PW language" and after setting up all fields I imported the MODx database tables into my PW database. From this point the migration script started it's work: Step 1: Map existing MODx templates to my newly created PW templates Step 2: Map all necessary fields from MODx to PW fields (based on the previously selected templates) - or just ignore fields I don't wan't to migrate Step 3: List all existing pages and select the pages that should not be migrated (e.g. old sitemap page). From this point on my migrator script did all the work. It created all pages (including the site structure with all its parents and children) and their fields. After importing I just had to copy the content from the old homepage (which was created as a seperate page below the root page) to the root page. That's it. Moving projects took about 1 hour. The most extensiv part in this process was to transform MODx templates to PW, build a new contact form and a menu function. All my projects were without users and permissions so it was quite low easy. At the moment I am working on the migration of a more complex website. This will take much longer but since the PW API is totally easy to understand it's not that hard at all. So thank you all for this great support and this framework! I really appreciate it! Long story short: Here are ex-MODx websites proudly powered by Processwire My own website with some stuff about me: http://brlnr.de And two more sites about events around sailing in Berlin http://www.ansegeln-berlin.de/ http://www.absegeln-berlin.de/7 points
-
Soma, is that German? Looks like a Finnish word actually.5 points
-
Hi @palacios000! What @kongondo said. I use the 'context' dropdown for two things: 1. to make my backend template forms look nice and compact, and 2. to reduce the amount of fields I need to use and create. I will explain this one because it is probably the most useful. So instead of having these fields and titles in these templates: Template: Houses with fields: house_address (label: House address) house_available (label: House available?) housing_development (label: Housing development) Template: Flats with fields: flat_address (label: Flat address) flat_available (label: Flat available?) building_name (label: Building name) Template: Mansion with fields: mansion_address (label: Mansion address) mansion_available (label: Mansion available?) mansion_name (label: Mansion name) I can do this: Template: Houses with fields: address (label: House address) available (label: House available?) name (label: Housing development) Template: Flats with fields: address (label: Flat address) available (label: Flat available?) name (label: Building name) Template: Mansion with fields: address (label: Mansion address) available (label: Mansion available?) name (label: Mansion name) I use the same three fields for slightly different things on different templates. This is helpful because when I'm writing code where, say, I want a list of all properties, I only have to call three fields. Does this make sense?5 points
-
@renobird Thanks for the link. Pinegrow looks interesting. @pwired Trying new things lead me to PW. I will not apologize! @soma YES.3 points
-
@LostKobrakai, I suggest you add this to the modules directory if/when you can? I think it is a useful addition, thanks!3 points
-
Yeah found this as well. It looks very much the same, but it's a textfield, while mine is really only another skin for pages multiselect.3 points
-
It allows you to save settings for a field on a per template basis. Let's say for a template called 'flats' you want the label of that field to be 'Available'. On another template, , called 'agents', you can reuse the same field but give it a different label, e.g. 'Premium'... You can also edit context settings when editing the list of fields when editing a template. Hover your mouse over the label of the field and an arrow will appear. Click on that, it opens a modal and you can set 'in context' changes there. Recent changes to PW (can't remember version) introduced the ability to save lots (all?) field settings on a per template basis. This is a really powerful feature, like many others in PW3 points
-
This is Joss' territory, so I am sure he will chime in with why Page fields are perfect for this, but until he does .... I'll say it - page fields are perfect for this Seriously though, they handle the multilanguage side of things and have so many other advantages. Remember that a page is just a row in a DB table which is how this would be set up in most other systems anyways - I think it is just the "page" tree structure in the admin that makes people think it is more resource intensive or something? If you are worried about your users see the page tree with 30 children, just make it a child of a hidden settings page or something else like that. If that is not sufficient, which it really should be, you can even hide the page (and its children) completely from your editor users using this draft module: https://processwire.com/talk/topic/1176-hiding-uneditable-pages-from-users/?p=849163 points
-
Hey chrizz - great job! Given all the ex-MODx'ers around here, I wonder if you'd be willing to share your migration script? Also wondering if you might be willing to adapt it so that it works as a plugin to Migrator like Nico's Wordpress Migrator. This might seem selfish as it would have my module get more use, but the main thing I am hoping to achieve is to help migration from MODx to handle image migration as well. Looking at your site it looks like you have manually dumped all the images into one (or maybe a few) /site/assets/images/ folders, rather than into the page's numbered assets folder which of course means that the images won't be accessible via the page edit images field etc. Migrator/MigratorWordpress takes care of all this which I think results in a better end result. Please don't take this as a criticism - just trying to see if we can end up with a more complete approach for those wanting to migrate from MODx. Anyway, please let me know if you'd be willing to help with a MODx plugin for Migrator - I would be very keen to help you out with it. Thanks again for your write up on your successful conversion!3 points
-
2 points
-
After reading Include & Bootstrap on the ProcessWire website I coded a simple shell script for outputting page informations. Here is the GitHub repository with further informations and usage instructions. Long story short, you can do things like pw get "/" which outputs this: or pw find "template=basic-page,parent=/about/,sort=-id,limit=4" id template rootParent which outputs this: I don’t know if it is in any way useful, but I think it’s a fun way to output PW content and to quickly get to page informations in a rather nerdy fashion.2 points
-
2 points
-
Adrian no problem Indeed I appreciate this, it's always good to learn more and to get some feedback. I just started my second ProcessWire project and there is so much more to discover... I tried to use the Page Fieldtype (parent=page.otherpagefield) but I got a complete different output. The point is that I don't want to get a whole page object, I need a plain value in order to receive this value using the ServicePages API. Unfortunately my use case is quite complex and you need a lot of background knowledge so I had to find another example. Use case: Categorize Posts/Pages "The common way": Create a single page for each category. Add a Page Inputfield, set up the parent page / template and you get a select list of categories (pages). Fine. "My way": Create just one page to hold all categories in a repeater. Add a SelectRelation Inputfield, set up field=category, repeater=r_categories. Then you get "the same" list. If you need more than just the title (or any other field) you should use the Page Inputfield for sure. The difference is that you don't select a page, you select a field value depending on a page. I guess this should also work for Profield Table subfields but I didn't test it.2 points
-
I just ended up using this: http://harvesthq.github.io/chosen/. It builds on the same inputfields as asmSelect does, so it was just a matter of switching the library. To use this in Pagefield you have to do one additional thing after installing to be able to use it for page fields. You need to add the module in the settings of the InputfieldPage module. This does currently not allow pages to be created inline, but it works with the second textblock which is used by all the other page inputfields as well. Maybe I'll add inline adding later. Edit: The module can now be found here: https://processwire.com/talk/topic/8955-inputfieldchosenselect/2 points
-
Looks pretty alive to me, but not because of the design. Minimal doesn't mean undesigned. You have to be much more careful with the details when there aren't many of them. Don't add more details but pay special attention to the ones you have already. Work harder on each one of them, see very well designed websites and try to figure how they solved the small things, try different solutions for each detail. From a first glance, I would say, choose a nice font from here —for example— http://www.haritomedia.com/best-script-handwritten-google-web-fonts/ the logo, and make it BIG, also get a nice badge for "new" http://freepsdfiles.net/web-elements/best-free-psd-badges-and-ribbons and get rid of those blocky spans under the images2 points
-
In my book, web design is part and parcel of development ...frontend development...2 points
-
If max files = 0, then your images fields is an array and also needs to be looped or grab an image using $image->first() or $image->eq(2) if you only want a single image. Am surprised that the url was output though...hmmm.. Try the following... //Loop through Carousel repeater on this page foreach($page->Carousel as $Slider){//note that repeater items are just pages. So $Slider is a page 'with fields' //loop through the images array foreach($Slider->Slider_Graphic as $graphic) {//foreach image field in each $Slider page... echo $graphic->url; echo $graphic->description; } }2 points
-
About the Project This project is now online for some months and I'm happy to finally have the time and the customers approval to write about it. As some of you might know germany has one of the best health care systems in the world. If you live here you're enforced by the law to have a health insurance: As an employee you take care of choosing your "Krankenkasse" (health insurance provider) and your employer pays your dues to them like taxes. If you're selfemployed or earn more than "the average worker" you can also choose/have to get a private health insurance which (in many cases) covers more services (most people here for example know the "Chefarztbehandlung" which means if you ever need to get to the hospital your insurance guarantees that you will be treated by the head head physician). People who are are civil servants get something called "Beihilfe" from the state which partially covers your medical treatments costs depending on where you live / are employed at (the federal state), if you're married, have childs and a bunch of other factors. For the remaining rest you have to get a "Restkostenversicherung" which covers the remaining rest of your expenses for treatments. The problem with the "Beihilfe" system is: It's REALLY complex and you have to read a lot (or get help) to understand it's rules. That's why our customer, the Continentale Krankenversicherung a.G., one of germanys largest insurance companys, asked us and our friends from Aufgesang (a specialist agency for Online Public Relations, Content Marketing and SEO) to build a portal that informs potential customers and give them the posibility to get in touch with local experts. As a plus people who are interested in an insurance can calculate their costs without having to read through all official laws and brochures. There currently are three editors (all professional journalists) that constantly update content and write new texts to cover more in depth topics. Furthermore there are plenty of features that are planned to be released in the next years so the portal as a whole will continue growing and keep getting more usefull and hopefully get the #1 source of information for "Beihilfe" and "Restkostenversicherung" in Germany. <3 Processwire From a technical point of view there were many custom tailored things we've implemented in processwire. The Search uses a modified Version of Jonathan Darts excellent Elasticsearch Module (with a fallback to a basic text search in pw). We've created a lot of services and Tools to import Excel lists of experts and their coverage areas, complex rulesets for the costs calculation, a frontend calculation tool (built on top of Knockout.js), several HannaCodes to insert Download-Buttons and information within the content and last but not least a custom pdf-guide which is completely based on the users input and generated on the fly from the "Beihilfe-Rechner" (calculation tool). There also are mechanisms to inform experts when someone wishes to contact them, a newsletter service and many, many other things. Currently there are about 30 installed modules, 42 "Physical" template files (53 Templates all in all) ... and growing. I'm (still) really happy we were allowed to choose processwire for this project as we NEVER had any task we couldn't manage within the blink of an eye. If I think about having to build all those import tools in (i.e.) Typo3 I'm pretty sure we would have needed double the time. So once again: Thanks ryan and all contributors for building such an awesome piece of software. P.S.: We're currently searching for senior php developers to continue developing this and more portals and websites. If you're interested: Feel free to contact me! P.P.S: There are three more sites to come in the next weeks. I'll present them here as always2 points
-
@nghi With ListerPro module you can make as many presets for search as you want. Like that:2 points
-
Wire Mail SMTP An extension to the (new) WireMail base class that uses SMTP-transport This module integrates EmailMessage, SMTP and SASL php-libraries from Manuel Lemos into ProcessWire. I use this continously evolved libraries for about 10 years now and there was never a reason or occasion not to do so. I use it nearly every day in my office for automated composing and sending personalized messages with attachments, requests for Disposition Notifications, etc. Also I have used it for sending personalized Bulkmails many times. The WireMailSmtp module extends the new email-related WireMail base class introduced in ProcessWire 2.4.1 (while this writing, the dev-branch only). Here are Ryans announcement. Current Version 0.8.0 (from 2024-09-25 -- initial version 0.0.1 was pushed on 2014-03-01) Changelog: https://github.com/horst-n/WireMailSmtp/blob/master/CHANGELOG.md Downlod: get it from the Modules Directory || fetch it from Github || or use the module-installer in PWs admin site modules panel with its class name "WireMailSmtp". Install and Configure Download the module into your site/modules/ directory and install it. In the config page you fill in settings for the SMTP server and optionaly the (default) sender, like email address, name and signature. You can test the smtp settings directly there. If it says "SUCCESS! SMTP settings appear to work correctly." you are ready to start using it in templates, modules or bootstrap scripts. Usage Examples The simplest way to use it: $numSent = wireMail($to, $from, $subject, $textBody); $numSent = wireMail($to, '', $subject, $textBody); // or with a default sender emailaddress on config page This will send a plain text message to each recipient. You may also use the object oriented style: $mail = wireMail(); // calling an empty wireMail() returns a wireMail object $mail->to($toEmail, $toName); $mail->from = $yourEmailaddress; // if you don't have set a default sender in config // or if you want to override that $mail->subject($subject); $mail->body($textBody); $numSent = $mail->send(); Or chained, like everywhere in ProcessWire: $mail = wireMail(); $numSent = $mail->to($toEmail)->subject($subject)->body($textBody)->send(); Additionaly to the basics there are more options available with WireMailSmtp. The main difference compared to the WireMail BaseClass is the sendSingle option. With it you can set only one To-Recipient but additional CC-Recipients. $mail = wireMail(); $mail->sendSingle(true)->to($toEmail, $toName)->cc(array('person1@example.com', 'person2@example.com', 'person3@example.com')); $numSent = $mail->subject($subject)->body($textBody)->send(); The same as function call with options array: $options = array( 'sendSingle' => true, 'cc' => array('person1@example.com', 'person2@example.com', 'person3@example.com') ); $numSent = wireMail($to, '', $subject, $textBody, $options); There are methods to your disposal to check if you have the right WireMail-Class and if the SMTP-settings are working: $mail = wireMail(); if($mail->className != 'WireMailSmtp') { // Uups, wrong WireMail-Class: do something to inform the user and quit echo "<p>Couldn't get the right WireMail-Module (WireMailSmtp). found: {$mail->className}</p>"; return; } if(!$mail->testConnection()) { // Connection not working: echo "<p>Couldn't connect to the SMTP server. Please check the {$mail->className} modules config settings!</p>"; return; } A MORE ADVANCED DEBUG METHOD! You can add some debug code into a template file and call a page with it: $to = array('me@example.com'); $subject = 'Wiremail-SMTP Test ' . date('H:i:s') . ' äöü ÄÖÜ ß'; $mail = wireMail(); if($mail->className != 'WireMailSmtp') { echo "<p>Couldn't get the right WireMail-Module (WireMailSmtp). found: {$mail->className}</p>"; } else { $mail->from = '--INSERT YOUR SENDER ADDRESS HERE --'; // <--- !!!! $mail->to($to); $mail->subject($subject); $mail->sendSingle(true); $mail->body("Titel\n\ntext text TEXT text text\n"); $mail->bodyHTML("<h1>Titel</h1><p>text text <strong>TEXT</strong> text text</p>"); $dump = $mail->debugSend(1); } So, in short, instead of using $mail->send(), use $mail->debugSend(1) to get output on a frontend testpage. The output is PRE formatted and contains the areas: SETTINGS, RESULT, ERRORS and a complete debuglog of the server connection, like this one: Following are a ... List of all options and features testConnection () - returns true on success, false on failures sendSingle ( true | false ) - default is false sendBulk ( true | false ) - default is false, Set this to true if you have lots of recipients (50+) to ($recipients) - one emailaddress or array with multiple emailaddresses cc ($recipients) - only available with mode sendSingle, one emailaddress or array with multiple emailaddresses bcc ($recipients) - one emailaddress or array with multiple emailaddresses from = 'person@example.com' - emailaddress, can be set in module config (called Sender Emailaddress) but it can be overwritten here fromName = 'Name Surname' - optional, can be set in module config (called Sender Name) but it can be overwritten here priority (3) - 1 = Highest | 2 = High | 3 = Normal | 4 = Low | 5 = Lowest dispositionNotification () or notification () - request a Disposition Notification subject ($subject) - subject of the message body ($textBody) - use this one alone to create and send plainText emailmessages bodyHTML ($htmlBody) - use this to create a Multipart Alternative Emailmessage (containing a HTML-Part and a Plaintext-Part as fallback) addSignature ( true | false ) - the default-behave is selectable in config screen, this can be overridden here (only available if a signature is defined in the config screen) attachment ($filename, $alternativeBasename = "") - add attachment file, optionally alternative basename send () - send the message(s) and return number of successful sent messages debugSend(1) - returns and / or outputs a (pre formatted) dump that contains the areas: SETTINGS, RESULT, ERRORS and a complete debuglog of the server connection. (See above the example code under ADVANCED DEBUG METHOD for further instructions!) getResult () - returns a dump (array) with all recipients (to, cc, bcc) and settings you have selected with the message, the message subject and body, and lists of successfull addresses and failed addresses, logActivity ($logmessage) - you may log success if you want logError ($logmessage) - you may log warnings, too. - Errors are logged automaticaly useSentLog (true | false) - intended for usage with e.g. third party newsletter modules - tells the send() method to make usage of the sentLog-methods - the following three sentLog methods are hookable, e.g. if you don't want log into files you may provide your own storage, or add additional functionality here sentLogReset () - starts a new LogSession - Best usage would be interactively once when setting up a new Newsletter sentLogGet () - is called automaticly within the send() method - returns an array containing all previously used emailaddresses sentLogAdd ($emailaddress) - is called automaticly within the send() method Changelog: https://github.com/horst-n/WireMailSmtp/blob/master/CHANGELOG.md1 point
-
-------------------------------------------------------------------------------------------------------------------------------- for PW 3.0+ please follow this link! -------------------------------------------------------------------------------------------------------------------------------- Croppable Image Module for PW >= 2.5.11 and PW <= 2.7.3 Version 0.8.3 alpha Hey, today I can announce an early (alpha) release of CroppableImage, what was forked from Anttis Thumbnails module. Until now there was a lot of work done by owzim, Martijn Geerts and me. We have solved the issues regarding the list from here: The modules are bundled together so that you only can and have to use FieldtypeCroppableImage for install, uninstall & configure. It uses new naming scheme that was introduced with PW 2.5.0 that supports suffixes. The complete image rendering is delegated to the core ImageSizer, or to any optional hooked in rendering engine. Template-settings are now fully supported, including removing variations when settings have changed. It fully respects settings for upscaling. If upscaling is set to false, you cannot select rectangles smaller than the crop setting. We implemented these enhancements: The GridView now is very nice and compact, and also benefits from the lately introduced setting for $config->adminThumbOptions. Permanent storage of the crop coordinates, quality and sharpening settings are now implemented native. No need to use PiM for this anymore. The usage/display of the Quality and Sharpening DropDown-Selects can be globally disabled/allowed in the modules Configpage. (additionally to that a setting on a 'per field base' is planned.) And the most wanted feature by the community: It gives back a pageimage and not the URL-string. This way you can use it like this: // get the first image instance of crop setting 'portrait' $image = $page->images->first()->getCrop('portrait'); You can further use every pageimage property like 'url', 'description', 'width' & 'height' with it: // get the first image instance of crop setting 'portrait' $image = $page->images->first()->getCrop('portrait'); echo "<img src='{$image->url}' alt='{$image->description}' />"; And you can proceed further image rendering with it: // get the first image instance of crop setting 'portrait' and proceed a resize with imagesizer $image = $page->images->first()->getCrop('portrait'); $thumb = $image->width(200); // or like this: $thumb = $page->images->first()->getCrop('portrait')->width(200); // and if you have installed Pia, you can use it here too: $thumb = $page->images->first()->getCrop('portrait')->crop("square=120"); The only downside with this is that when you (as the site developer) have enabled the usage of DropDown-Selects in the images editor, you do not know the values the editors have chosen for the images. As a workaround for this you can use the getCrop() method with a second param. This is a PW selector string. It can contain as many of the known pageimage options like 'quality', 'sharpening', 'cropping', etc, as you need, but none of them is required. But required is at least one setting for 'width' or 'height': $image = $page->images->first()->getCrop('portrait', "width=200"); $image = $page->images->first()->getCrop('portrait', "width=200, height=200, quality=80"); $image = $page->images->first()->getCrop('portrait', "height=400, sharpening=medium, quality=75"); . . You can get the module from GitHub: https://github.com/horst-n/CroppableImage (Better Docs are coming soon) Screenshots Related Infos A good setting in site/config.php for the AdminThumbs are: (height=>200 and scale=>0.5 !) $config->adminThumbOptions = array( 'width' => 0, 'height' => 200, 'scale' => 0.5, 'imageSizer' => array( 'upscaling' => false, 'cropping' => true, 'autoRotation' => true, 'sharpening' => 'soft', 'quality' => 90, 'suffix' => array(), ) );1 point
-
For some people it may be cool to run their own website on their own HW. But a PC is power hungry and some micros aren't powerful enough; therefore I tried to use a mini server with less than 5W power consumption. The setup: Linux (Pi: Raspbian/C1: Ubuntu) Apache2 + PHP5 MySQL + PhpMyAdmin NoIp2 (dynamic DNS client) PW (of course;-) PW is running OK on Raspberry Pi, but when you create a page with some images and resizing, you have to wait for the results between a couple of minutes and an hour; page rendering afterwards is within seconds. I wanted to try something quicker so I got an Odroid-C1 (same price as Pi - 35$) and the results are very good - C1 is about 6 times faster than Pi and after some configuring it runs stable and without problems. If someone's interested in details, don't hesitate to ask.1 point
-
As a speaker of English as a second language, I really notice this quirky error. I notice it a lot in this community, in the blogs and forum entries, but also on official pages (the latest: The PW Directory, front and centre). "its" means the thing belongs to the thing. "it's" means "it is". The simplest test would be: assertTrue( "it is" == meaning_of( $phrase ) ); IOW, if you can write "it is" right there, it's OK to write "it's". Otherwise, always always write "its". Sorta grumpy today.1 point
-
@renobird I'll keep the forum posted on progress with my front end experiment.1 point
-
So yeah… *hoping to flip back to the original topic* Blocs looks cool. Would be interested to hear how it goes if you build a ProcessWire powered site with it.1 point
-
I guess you mistook it for kumarreksituteskenteleentuvaisehkollaismaisekkuudellisenneskenteluttelemattomammuuksissansakaankopahan.1 point
-
Ah @pwired I understand. Yes, time is a priority, but so is elegance. I prefer an elegant (code) solution that will be manageable and pleasant to work with in the long run, instead of a clunky one. For example, I have no motivation to become expert at wordpress, even if devoting myself to it and getting good would ultimately save me time.1 point
-
1 point
-
1 point
-
Hi kathep, I haven't tried Blocs, but it looks nice. I've been keeping my eye on Pinegrow. I think with either of those it would be pretty easy to design your static pages and then hook the HTML/CSS/JS up to ProcessWire.1 point
-
I would say "blocky" hits the overall point. But I've also some small things, which as diogo pointed out, do play a big role on minimalistic sites. - Try do find icons which are more balanced in weight / form, currently instagram has kind of a heavy stomage feeling, twitter is a little light and the email icon seems to be slightly off vertical centering. - The header can easily be bigger in the beginning (3-6 times of now). Maybe add a transition to the (smaller) fixed state. - The logo/title of your first version was a unloved, rigid pice of letters. diogos suggestion is quite a nice one. For a make up artist this has to be a alive font in some way. Oswald is better than your first font, but it's still quite solid and in no means playful. - Avoid all those borders your getting from placing the image into a box, followed by boxes. Let the images be themselfes, if needed just have a background for the tags. - The new background gradient looks quite modern. But in my opinion (really just a opinion) it's to widespread from a kinda dark gray to a really light gray. Maybe try it a little mor subtile.1 point
-
I think it would be best to open a github issue for this, as Ryan doesn't always get things here. @kongondo Yeah, but this way nobody had to think about autocomplete1 point
-
@mrkhan: There have been changes in ProcessPageEdit recently. The tabs need to be deleted manually. The code below works in 2.5.25 (dev). (don't know if thats the case for 2.5 and if so could you report this back) function removeSettings(HookEvent $event){ // check what role the user has, if not has editor role do nothing if(!wire("user")->hasRole("webmaster")) return; // $event->return being the inputfield wrapper $wrapper = $event->return; // set the inputfield wrapper to hidden $wrapper->collapsed = Inputfield::collapsedHidden; // Get the active Object (ProcessPageEdit) $process = $event->object; // Remove the Settings tab with the ID $process->removeTab('ProcessPageEditSettings'); // we're done }1 point
-
@netcarver C1's typical power consumption: 0.5A @ 5V, up to 2A @ 5V with several USB peripherals. So 10W in worst case, but normally 2-3W. I use it as headless server, so some RAM and maybe power (HDMI and graphics off) are saved.1 point
-
DavidsonGalleries.com Well it has been a long time coming, but I am finally here, LAUNCH DAY! When I started this project I knew very little of php / css / javascript / mysql, but man have I learned a lot. Thanks to hard work, endless reading and always friendly assistance from this amazing community I have begun my dream of being a web developer. This site has all the bells and whistles (that I could manage). I custom built the site using the bootstrap framework and lashings of javascript. The site uses several awesome modules including : ProcessBatcher ProCache ImportPagesCSV AllInOneMinify BatchChildEditor ProcessRedirects FieldtypeCropImage PageListBetterLabels PageListShowPageId ProcessDatabaseBackups ProcessGoogleAnalytics ProcessLoginHistory ProcessLogs Seriously though, I want to thank more of you by name, but I'm going to have to go through my posts so I make sure to mention everyone. Thank you so much for your wonderful support, and I really would appreciate any feedback that you might have MuchDevelopment1 point
-
Aah, I recall visiting an exhibition of Albrecht Dürer prints in France (in Le Havre, if memory serves) many, many years ago (1969/70ish). Anyhow, good job, MuchDev.1 point
-
What do you mean by "secure"? The normal way to do it would be this: echo "<a href='{$page->pdf_file->url}' target="_blank">PDF</a>"; // or for a multi file field echo "<a href='{$page->pdf_file->eq(0)->url}' target="_blank">PDF</a>";1 point
-
Ah then it's neither about renaming wire nor about multisite. I am lost here.1 point
-
What Jan posted above works, but in my opinion complete free tagging is a mess. You end up with a ton of tags that are similar. You also get over tagging or no tagging at all. We setup something like this a while ago, and eventually realized it wasn't a useful method. Just my 2 cents. In the end there is no right way, and ProcessWire will let you build pretty much any solution you want.1 point
-
What Ryan described earlier in this thread sounds like exactly what you want? You get a text input where you can just write whatever (thus “free” tagging). That way you don’t need to create pages, but your tags are of course more prone to typos and you have to use urlSegments or GET parameters to show matching pages.1 point
-
Martijn, I totally agree, meaning and communication trumps grammar, and processwire stuff trumps anything else in this forum. Which is why I took this to the pub, not to actual work threads. And just in case this conversation takes a turn "to the right", as it were, i.e. with "shoulds" and flags flying for purity, I'll just state my intention clearly: Correct use of language is essential for computers to work, but not for people to work. I like that people correct my grammar in either case, because I like to learn, but I do get ticked off when they do so at the wrong time, distracting from the point I try to make. Peace and love.1 point
-
Here are the 2 methods related to comments from the Process Module in the screenshot above. You can do pretty much the same thing in a template instead of a module. Sorry I don't have time to explain further, or put it into a more complete write up. Hopefully you can pick that apart and get what you need.1 point
-
Hey join the club mate and with processwire you will save your self a lot of time and headache.1 point
-
Back up now. Looks well. In another life, I'd love to run a print gallery so I enjoyed looking through this1 point
-
Currently showing Maintenance Mode for me. Have you taken it down?1 point
-
@ajben - very nice - some of my 'older' clients would probably benefit from a simpler admin (even though pw admin with Reno is IMHO state of the art..)! Would be willing to contribute, help in any way to push forward alternative admin themes!1 point
-
updated to version 0.0.7 Added a new flag that tells the send() method to make usage of the new logging methods for handling large amounts of recipients by using permanent storage across multiple script calls: useSentLog( true | false ) Tells the send()-method to make usage of the SentLog-methods! sentLogReset() It starts a new LogSession - Best usage would be interactively once when setting up a new Newsletter. sentLogGet() is called automaticly by the send() method - returns an array containing all previously used emailaddresses sentLogAdd($emailaddress) is called automaticly by the send() method - stores each successfully sent emailaddress into the provided log This is intended to use within third party modules for newsletter systems. All three sentLog methods are made hookable, so, e.g. if you don't want log into files you may provide your own storage, or add additional functionality here. The usage is really simple, I think. When starting a new Newsletter Session, you once have to call wireMail()->sentLogReset() to clear any previously stored content in the log. This best should be done manually / interactively I think. After that you only have to set the useSentLog flag to true, e.g by passing an options array into the procedural function call $options = array( 'sendBulk' => true, 'useSentLog' => true ); $numSent = wireMail($to, $from, $textBody, $options); or in object-oriented style like this $numSent = wireMail()->sendBulk(true)->useSentLog(true)->to($to)->from($from)->body($textBody)->send(); That's all. Now you can call your newsletter sending script multiple times (for example bind to lazy cron) and no recipient get lost nor will receive multiple messages. No more worries about script timeouts or other interruptions, just call your script in regular intervals, but ensure that only one instance is running at the time and not multiple in parallel. It would not mess up the logfile because it uses filelocking, but you may get trouble with your SMTP provider if you stress the server. PS: @Nico: want to test it in the near future?1 point
-
Looks like a .htaccess or folder location problem From Ryan When you get 404s for everything but the homepage, that means the .htaccess file is not working. Edit your .htaccess file and paste in some garbage at the top, like "alkjaelfkjaef" and save. Now view your homepage. If you get a 500 error, your .htaccess is working (and you should look at the RewriteBase Nik mentioned). But if your homepage still works, then you know your .htaccess is not working. At this point, you need to tell your web host to turn it on. Or if you run the server, you need to add "AllowOveride All" to your httpd.conf for the account. Try this 1. find the line "# RewriteBase /" 2. delete the "#" 3. Important: put in the whole URL of your processwire-folder without the "http://" From Nik Did you try this in your .htaccess already? RewriteBase /processwire-folder/ And then try http://mywebsite.com/processwire/ That would be the url if you didn't change it during the install.1 point
-
Also, curious if any other pages on your site load, or do you just get the homepage? If you can only get the homepage (which is what I suspect) this points to .htaccess being disabled or mod_rewrite not being installed. The first thing to do is to load the /.htaccess file and edit it, inserting some garbage at the top like "aljkealkjfaljkfa". Save and try to view your homepage. If you still get your homepage (as opposed to a 500 error message) then your server is not reading the .htaccess file. Your sysadmin may need to add "AllowOverride All" to your domain's configuration in httpd.conf.1 point