Leaderboard
Popular Content
Showing content with the highest reputation on 03/24/2018 in all areas
-
@maxf5, I have just removed certain remark from your earlier post as a moderation action. Also my apologies to @cmscritic – you definitely shouldn't have to see that kind of language here. A friendly reminder from the moderating team: please keep the tone of discussion polite. Crude or discriminative remarks and insults of any kind will absolutely not be tolerated on this forum. As a community we're committed to keeping this forum a safe and welcoming place for everyone. Think before you post.10 points
-
Thanks so much for continuing to develop this awesome tool! Happy to report I just bought my first Pro module this week (ProFields) and it's really streamlining my workflow. You are the rare developer who understands the essence of why people adore the product (your frequent use of the words "fun" and "love" regarding PW is apt) and just continue to make it better. Curious about the non-profit data research project you mentioned in the blog post? I am using PW to interact with the REDCap API for a large public mental health research project. I was initially asked to do it this project in R (which I use for data analysis in my dayjob). As discussions continued, I realized what they actually needed was a highly configurable web interface with a few data score norming and graphing features...PW to the rescue, and it's inspired me to make my first module (REDCapi) and Process Module for the admin interface.9 points
-
So I decided to wade into module development and created a wrapper module around ImageOptim, a service that compresses and optimizes images in the cloud. ImageOptim currently handles JPG, PNG and GIF files and, depending on the settings you use, shaves off between 15% and 60% in filesize. Great for bandwidth and great for users, especially on mobile. This module handles the part of uploading images to ImageOptim via their official API, downloading the optimized version and storing it alongside the original image. Download & Info GitHub / Module directory / Readme / Usage Why ImageOptim? There are other image optimization services out there, some of them free, that have outstanding ProcessWire modules. A few things make ImageOptim the best tool for most of my customers: It's not free, i.e. it will probably be around for a while and offers support. However, it's cheaper than some of the bigger competitors like Cloudinary. And it does PNG compression better than any of the free services out there, especially those with alpha channels. Installation Install the module like any other ProcessWire module, by either copying the folder into your modules folder or installing it via the admin. See above for downloads links on GitHub and in the module directory. Requirements To be able to upload images to the service, allow_url_fopen must be set on the server. The module will abort installation if that's not the case. I have only tested the module on ProcessWire 3.x installations. I don't see why it shouldn't work in 2.x, if anyone wants to try it out and report back. ImageOptim account To compress images, you first need to sign up for an ImageOptim account. They offer free trials to try the service. Usage (manual optimization) Images can be optimized by calling the optimize() method on any image. You can pass an options array to set ImageOptim API parameters. $image->size(800,600)->optimize()->url $image->optimize(['quality' => 'low', 'dpr' => 2]) // Set quality to low and enable hi-dpi mode Automatic optimization The module also has an automatic mode that optimizes all image variations after resizing. This is the recommended way to use this module since it leaves the original image uncompressed, but optimizes all derivative images. $image->size(800,600)->url // nothing to do here; image is optimized automatically To change compression setting for single images, you can pass an options array along with the standard ImageResizer options. Passing false disables optimization. $image->size(800, 600, ['optimize' => 'medium']) $image->size(800, 600, ['optimize' => ['quality' => 'low', 'dpr' => 2]]) $image->size(800, 600, ['optimize' => false]) For detailed usage instructions and all API parameters, see the usage instructions on GitHub. Filenames Optimized images will be suffixed, e.g. image.jpg becomes image.optim.jpg. You can configure the suffix in the module settings. Roadmap Asynchronous processing. Not really high on the list. Image variations need to be created anyway, so waiting a few seconds longer on first load is preferable to adding complexity to achieve async optimization. Optimize image variations created by other modules. CroppableImage comes to mind. I don't use any of these, so if somebody wants to help out and submit a pull request — all for it! Add a dedicated page in the setup menu with a dashboard and detailed statistics. ImageOptim's API is very barebones for now, so not sure if that's feasible or even necessary. Stability I've been using this module on production sites for some time now, without hiccups. If you do notice oddities, feel free to comment here or investigate and submit PRs.8 points
-
Nice site. He has other interesting articles on this site: http://www.davidkissinger.com/spin-up-a-quick-installation-of-processwire-with-docker-compose/5 points
-
New ways to look at content management: ProcessWire http://www.davidkissinger.com/processwire/5 points
-
With everything running smoothly on the new master version, we wanted to recommend a few additional steps that will help you take advantage of some of the new features. Plus a look at developing for and with ProcessWire. https://processwire.com/blog/posts/what-to-do-after-upgrading-to-the-latest-master/5 points
-
The ProcessDashboards module which is the latest iteration of this is back to being a simple helper module, close to the original Dashboard module by @Pete, but with some additional features, and that the module no longer changes anything in the admin, meaning that it doesn't auto-change the admin page to use the process; instead you create one or more dashboards, and input the path to a php file to render the dashboard; if you want to use one of them as the admin home screen, then you just change that admin page's process to use this module (ProcessDashboards). Since making dashboards is fundamentally creating markup, it is better to keep all of the files for the dashboard in the templates folder. Also, if there were to be any dashboard module that output markup, it could become difficult to support multiple admin themes. Users of UIKit theme could build a simple dashboard using all native UIKit markup and not have to include a css framework (as i have done for the examples, which run inside the reno theme). Since this type of setup is not really suitable for a standalone module, or a site profile, i see it more as a construction kit. You need the base module; if you want to use the shortcuts and widgets functionality, there is another module that installs all of the fields & templates for that setup; You need the files that generate the dashboard(s) and the widgets that go in the templates folder, including css/js, libraries, widget partials, and functions. Hopefully this can all be on GitHub soon, once i sort out some issues with my current dev computer (old os no longer being able to connect to github)...4 points
-
Thanks for this blog post @ryan. The new features are coming at such a pace I sometimes only have time to get excited, but not to try them out. Those recommendations are really useful (at least to me). I would enjoy to read more about use cases for the newly added stuff.4 points
-
Hi @tux and welcome to PW. a) look at the bottom of the page: Powered by Invision Community - it's also PHP-based, so sharing content between PW and IP.Board is pretty easy. Both systems have an API and hookable methods. https://invisioncommunity.com/features/content#forums b) Depends how you define "integrate". Haven't used or looked at phpBB in a long long time, but since it's also built with PHP, the two systems can certainly talk to each other. Bootstrapping PW is easy: https://processwire.com/api/include/ I guess you would have to decide what your main system is gonna be: the forum or PW? The rest is simply making sure you can use the same CSS for both, in order to make it look like one system, and not alienate visitors when they switch from one to the other.3 points
-
Hi @d'Hinnisdaël, many thanks for this well crafted module. I (only) have read the modules code and checked some, (maybe critical) points for image modules . Everything seems to be well done! Only one thing I spotted, needs a bit clarification from you, as I may not see the whole picture yet. You added a new hook delete to Pageimage. I cannot see how this integrates with PW's methods for deleting variations. How gets it invoked when I a) delete an image via UI and b) when I call removeVariations() via the API? Or what is it for, exactly? Besides the integration with unlink & removeVariations, it may be very useful to have a function that only removes the variations from ImageOptim! TL;DR3 points
-
Thanks, I appreciate that. While I can understand being displeased that we are no longer powered by Processwire, I don't think it's reasonable to request that I update this community every time I make a change. It is my job to try out various systems repeatedly and our site has been powered by more than one CMS (pw and wp aside). Do take this nicely but the entire reason for CMS Critic is that we are not accountable to any one CMS and that is how we maintain our integrity. It's been amazing using PW for the period for which we have but we WILL switch it up and we ARE open to change. To name a few, I've run the site on WP, PW, Serendipity and Agility CMS. Also, realize that we have been sure to promote PW heavily and continue to think it's an excellent CMS, regardless of whether we run it on our site. I think realistically, we have and continue to give back in spades. Feel free to ask questions if you wish, I'm always willing to answer.3 points
-
I'm very happy you like it @alan. You definitely can use this for any single page application. That's exactly why I built this module for. Please don't hesitate to share the issues that might come up when using this module. I would love hear some feedback and maybe fix bugs if there are any.3 points
-
Sorry for bumping and old topic... but it seems there is still no language-module features for swapping languages with the default? I had this issue and found that dealing with PW databases was the fastest route for me: To swap language strings repeat this SQL for each multilanguage field: UPDATE field_FIELDNAME s1, field_FIELDNAME s2 SET s1.data = s1.data123, s1.data123 = s2.data WHERE s1.pages_id = s2.pages_id; FIELDNAME is your fieldname in PW and data123 is the column name for the language your are swapping the default for. Just check any multilanguage field table to see the correct column name. Finally to swap page names run this SQL: UPDATE pages s1, pages s2 SET s1.name = s1.name123, s1.name123 = s2.name WHERE s1.id = s2.id AND s1.name123 IS NOT NULL Obviously it is risky to tamper with databases, but this approach saved me lots of work with a big site with reasonably few fields. The language-module should have this sort of swappery built-in.3 points
-
Never used it myself. But with the CRM we use (also cloud / SaaS solution), the API proved to be absolutely useless when it comes to search. I wanted to use the API to check if a contact/customer/lead already exists from within PW, and then either select one, or create a new one and save it from PW also in the CRM via API calls. That part of their API just proved to be unreliable. So, if you have an existing set of clients/leads/customers, I would first of all check how well the search / query functionality delivers (speed, accuracy etc.). Sorry, not much help with concrete infos about Hubspot, but just a hint what to look out for if you take a test-run.2 points
-
THANK you @dadish — this; SPA + PW as an API + GraphQL for PW, for me is a milestone exciting proposition. I hope I make it the biggest thing to happen to my PW world since I read the word "ProcessWire" on the bottom generous Marty Walker's web site and first visited processwire.com. First steps for me are reading up on PWAs and finally trying to finish a Wes Bos course on ES6, then I'm off to add in PW as an API & GraphQL. Exciting!2 points
-
@mscore if you think this should be included in the core module, you should send an issue or feature request at Github, to get better recognition! And many thanks for sharing this solution!2 points
-
@MilenKo For interfaces (buttons, short strings, etc) this is what we do, I am not saying either way is better just different way of doing this. ## _languages.php $lang_strings = array( 'home_button' => array( 'en'=>'Home', 'fr'=>'Acceuil', ), 'about_button' => array( 'en'=>'About', 'fr'=>'Apropos', ), 'links_button' => array( 'en'=>'Links', 'fr'=>'Liens', ), ); ## _func.php function userLang($lang){ switch($lang){ case 'fr': $lang = 'fr'; break; default: $lang = 'en'; } return $lang; } ## _main.php $lang = userLang($user->language->name); <nav> <div><a href="#"><?= $lang_strings['home_button'][$lang]; ?></a></div> <div><a href="#"><?= $lang_strings['about_button'][$lang]; ?></a></div> <div><a href="#"><?= $lang_strings['links_button'][$lang]; ?></a></div> </nav>2 points
-
2 points
-
Excuse me, i don't wanted to offend!! And i know PW owe cmscritic pretty much. Maybe the one or another wouldn't have found to PW without it giving attention to our wonderful system in a big lake of cms.2 points
-
Yep, makes implementing websites a hell of a lot easier. If you don't like it, that's your choice. I don't appreciate your use of the term "gay" as something terrible or wrong. My brother happens to be gay and your opinion may have had value if you hadn't showed your hand and made such an ignorant reference.2 points
-
Alternate Select Multiple It refers to this (https://code.google.com/archive/p/jquery-asmselect/) developed by Ryan outside of PW, but included as an inputfield type for use with Page reference fields.2 points
-
Sometimes you have clients who will login to the admin, and they perhaps only need to access a few areas of the site, such as: a product or blog list (ListerPro) site settings formbuilder entries specific front end pages documentation helpdesk backup interface Server health or server status (for example site5 has a page for every server to see it's status) Link to a bookmark (page tree bookmark for example) - this is awesome by the way Run a special action like clear a wirecache or other custom caching Add a billing or late payment notice Add an alert about upcoming server maintenance The Problem: How can you collate all of these diverse links and messages into 1 page, as fast and easy as possible, make it hassle-free to add stuff to it, maybe some messages, change the order of the links etc. In some systems this is called the Dashboard. You can make one in a few minutes using: 1.) Admin Custom Pages 2.) ready.php in your site folder Steps: Install ACP create a file inside templates for your dashboard (e.g. _ac_dashboard.php). Create your dashboard page below the admin branch of the page tree, assign it to ACP, and set the template to use to the one you created. This example will display a table of quicklinks. Contents of the dasboard file: <?php wire('modules')->get('MarkupAdminDataTable'); ?> <h3>Title of site here</h3> <div id='ProcessFieldList'> <table id='AdminDataTable1' class='AdminDataTable AdminDataList AdminDataTableResponsive AdminDataTableSortable'> <thead> <tr> <th>Item</th> <th>Comment</th> </tr> </thead> <tbody> <tr> <td><a href='<?php echo $config->urls->admin?>blog/'>Blog</a></td> <td>Filterable/Searchable listing of blog posts.</td> </tr> <tr> <td><a href='<?php echo $config->urls->admin?>news/'>News</a></td> <td>Filterable/Searchable listing of news items.</td> </tr> <tr> <td><a href='<?php echo $config->urls->admin?>projects/'>Projects</a></td> <td>Filterable/Searchable listing of projects.</td> </tr> <tr> <td><a href='<?php echo $config->urls->admin?>page/'>Page Tree</a></td> <td>A hierarchical listing of the pages in your site.</td> </tr> <tr> <td><a href='<?php echo $config->urls->admin?>settings/'>Site Settings</a></td> <td>Global site settings</td> </tr> </tbody> </table> <script>AdminDataTable.initTable($('#AdminDataTable1'));</script> </div><!--/#ProcessFieldList--> You only need this if you want to redirect logins to the dashboard: add to ready.php (where 1234 is the ID of your dashboard page): if($page->template=="admin" && $page->id == 2) $session->redirect($pages->get(1234)->url);1 point
-
I suggest just hiding the controls with some custom CSS in the admin (you can add this with Admin On Steroids or Admin Custom Files). That way it's easier to update the core without losing your customisations. One approach is to intercept and modify images in CKEditor fields using a textformatter. Take a look at Image Interceptor.1 point
-
1 point
-
@tpr Thank you for that helpful info. I am still learning project after project. @neosin Thank you for the alternative solution as well. For sure I could use it for some other projects, but in this one the idea was to provide an easy way to my friend to edit the translations without asking me to mess with the code once the project is finished. This is what I love in ProcessWire - the elasticity of accomplishing the things in so many different ways - where the sky is the limit and it is up to the devs to decide which way to get the things done.1 point
-
In case somebody stumbles upon this thread looking for an ImageOptim plugin, I ended up creating one. It's very much inspired by the TinyPNG module. ProcessWire ImageOptim module To get a sense of where and when to create hooks for optimizing images on upload / resize, these two along with Autosmush could prove helpful.1 point
-
I've opened a GitHub request: https://github.com/processwire/processwire-requests/issues/1721 point
-
Then kindly refrain from using the term for anything other than its actual use.1 point
-
I know this is from a while ago but I just wanted to say Thanks! @hellomoto. That little snippet just saved me a ton of time and frustration!!1 point
-
Ok - I think I've got this half-way solved. I found a similar discussion on this site: https://forum.bubble.is/t/solved-fb-login-domain-problem/3267/36 March 2018 Facebook have changed their app policy to use Strictmode for redirect URI's. So you need to enter https://YOURDOMAIN.COM/login-facebook/ into the 'Valid OAuth Redirect URIs' field. I think you probably also now need be using https to make it work. So I get the correct FB authorisation screen when you visit the /login-facebook page. The remaining problem now is that the redirect after FB authorisation isn't working. I get a 500 error - FB seems to be trying to send me back to https://YOURDOMAIN.COM/login-facebook/ rather than the page I've chosen in the module settings. Any ideas? Edit: The above works fine - I was trying to map the FB profile image field direct to a ProcessWire image field which you can do and this was causing the error.1 point
-
I'd like to get some general feedback from people using the module. If you have a minute, please share your experiences or issues (even those that are self-resolved, if any). If it's looking stable enough, I'd like to bump to stable v1. If there are issues, please also feel free to let me know. Thanks!1 point
-
That's not actually true - it's the class name that has to match the file name.1 point
-
@ridgedale, the essence of your scenario is that you have some newsletters, and for each newsletter you have: 1. A file 2. Some metadata about that file (its month and its year) You want to associate the metadata with the file. Using a file naming scheme and a folder structure is one way to associate the metadata with the files, but it's not the only way, nor is it the "ProcessWire way". The ProcessWire way is to use pages and/or the metadata fields that are built into File fields. If you have a lot of metadata to associate with a file then the most powerful approach is the "one page per file" approach, which is what @LMD is suggesting. This way you can use all the available PW fields in your file page to store different kinds of metadata about each file. But the downside to this approach is that the UI/workflow can be a bit less than ideal for clients, especially if they have a lot of files that they want to upload at once and populate metadata for. That's because, generally speaking, they will have to edit each file page individually (although there can be solutions to this such as Lister Pro inline editing, Batch Child Editor, and automatically creating a page for each file similar to what is done in AutoImagePages). But you only have a little bit of metadata per file so I don't think you need to go this sophisticated. Instead I suggest you use a repeater for the years, and file tags for the months. See these screenshots... Then you can get the latest newsletter like this... $newsletters_page = $pages->get("template=newsletters"); $latest_year = $newsletters_page->newsletters->find("newsletter_files.count>0, sort=-year")->first(); $latest_newsletter = $latest_year->newsletter_files->sort("-tags")->first(); $month = substr($latest_newsletter->tags, 3); echo "<a href='$latest_newsletter->url'>$month $latest_year->year</a>"; The pages that visitors browse the newsletters through can be completely decoupled from the storage of the newsletter files. You just get the relevant repeater items by year according to the page being viewed, e.g. $years = $newsletters_page->newsletters->find("year>=1980, year<1990, sort=year"); You could even do it without actual pages for each decade, and use URL segments to get any range of years.1 point
-
@cmscritic, you should fix that 3.2 mb stock photo. maybe with that one $ rm -rf $ git clone https://github.com/processwire/processwire1 point
-
just added the renderTable() method: $form->onSuccess = function($form) { $form->linkedFields = [ 'pdf' => 'files' ]; $log = $form->createPage(123, 'rockforms_anfrage', date('d.m.Y H:i:s') . ', {forename} {surname} {email}'); $m = new WireMail(); $m->to('your@email.com') ->from('your@email.com') ->subject('Your great subject') ->bodyHTML($form->renderTable()); foreach($log->files as $file) $m->attachment($file->filename); $m->send(); // return success message return '<div class="uk-text-center uk-padding-large">'. '<h3>ENERGIEGURU bedankt sich für ihre Anfrage.</h3>'. '<div>Wir melden uns in Kürze bei Ihnen. Wenn Sie Ihre letzte Jahresrechnung hochgeladen '. 'haben erhalten Sie in den nächsten 24 Stunden Ihr individuelles Angebot!</div>'. $form->renderTable([ 'wrapper' => '<div class="uk-card uk-card-secondary uk-card-body uk-margin">{table}</div>', ]). '</div>'; }; I agree this could be automated, but at least until that is finished it is already REALLY simple to accomplish.1 point
-
I see your points - I started that way too. Then I realized it's much easier to handle multi-language strings like success message, etc so I added a GUI. I still think this is an improvement, I can make adjustments much easier in the admin when needed. But it's not a requirement, you can use it purely from code too. The form process part looks like this: if ($nfh->checkSuccess()) { $nfh->saveToPage($nfh->getTitle('name, email')); $nfh->sendAdminEmail(); $nfh->getResponse(); exit; } Here saveToPage, sendEmail, sendAdminEmail methods can have parameters so you don't need to use the corresponding admin page. If there's a page for it, then adding a form is as easy as $nfh = addForm(1066); echo $nfh->form; // or $nfh->renderForm() The module loads the form and form field files from page ID 1066 name. Anyway, I think I'll clean up it a bit and share as I see there's a need for it.1 point
-
This fieldtype wont be suitable for what you want. Instead, add a hidden textarea field to your templates, then in a saveReady hook loop over the template fields and add markup-free text (use strip_tags) to the textarea. You'll need an if/else structure to handle all the different field types you want to support.1 point
-
More updates! Here is what was added since my last post: FieldtypeDatetime now supports format argument. Which allows you to pass PHP date format string and retrieve your datetime values formatted the way you want. Besides FieldtypeDatetime fields, the built-in fields created and modified are also support new format argument. FieldtypeOptions is now supported. first and last fields on PageArray types are now supported. As per @eelkenet's request. See above post for details on those. Finally, now there is a way to add support for any fieldtype you want via third-party module. What you need to do is create a module with the name exactly as the fieldtype you want to add support for with "GraphQL" prefix. So for FieldtypeMapMarker it would be GraphQLFieldtypeMapMarker. Then you need to add three required methods and install it. This will automatically add GraphQL support for your desired fieldtype and it will be available in your GraphQL api. Checkout the documentation and an example module for reference.1 point
-
Thanks @Juergen got it working finally, I had the file here: mystyles:/site/modules/InputfieldCKEditor/mystyles.js And turns out I had errors in that file too. But got it to working after finding the errors in the console when CKEditor wasnt loading properly.1 point
-
Can you compare my settings to yours, because in my case it works well. I have my JS custom file located in the folder "ckeditor". Path to the JS-file entered in the input: mystyles:/site/templates/ckeditor/mystyles.js and in the mystyles.js I have fe UIKit styles like these: CKEDITOR.stylesSet.add( 'mystyles', [ { name: 'Inline Code', element: 'code' }, { name: 'Inline Quotation', element: 'q' }, { name: 'Bild links', element: 'img', attributes: { 'class': 'align_left' } }, { name: 'Bild rechts', element: 'img', attributes: { 'class': 'align_right' } }, { name: 'Bild zentriert', element: 'img', attributes: { 'class': 'align_center' } }, { name: 'Small', element: 'small' }, { name: 'Text durchstreichen', element: 'del' }, { name: 'Inserted Text', element: 'ins' }, { name: 'Cited Work', element: 'cite' }, { name: 'Highlight', element: 'mark' }, { name: 'Einfügen', element: 'ins' }, { name: 'Sample', element: 'samp' }, /* Uikit headlines */ { name: 'unterstrichen', element: 'h3', attributes: { 'class': 'uk-heading-divider' } }, { name: 'Linie in der Mitte', element: 'h', attributes: { 'class': 'uk-heading-line' } }, { name: 'Kugel am Anfang', element: 'h', attributes: { 'class': 'uk-heading-bullet' } }, /* Uikit paragraphs */ { name: 'Kleine Schrift', element: 'p', attributes: { 'class': 'uk-text-small' } }, { name: 'Große Schrift', element: 'p', attributes: { 'class': 'uk-text-large' } }, { name: 'Nur Kleinbuchstaben', element: 'p', attributes: { 'class': 'uk-text-lowercase' } }, { name: 'Nur Großbuchstaben', element: 'p', attributes: { 'class': 'uk-text-uppercase' } }, { name: 'Erster Buchstabe groß', element: 'p', attributes: { 'class': 'uk-text-capitalize' } }, { name: 'Farbe: gedämpft', element: 'p', attributes: { 'class': 'uk-text-muted' } }, { name: 'Farbe: Primär', element: 'p', attributes: { 'class': 'uk-text-primary' } }, { name: 'Farbe: Erfolg', element: 'p', attributes: { 'class': 'uk-text-success' } }, { name: 'Farbe: Warnung', element: 'p', attributes: { 'class': 'uk-text-warning' } }, { name: 'Farbe: Gefahr', element: 'p', attributes: { 'class': 'uk-text-danger' } }, /* ul classes */ { name: 'Liste mit Kugel', element: 'ul', attributes: { 'class': 'uk-list uk-list-bullet'}}, { name: 'Liste mit Linie', element: 'ul', attributes: { 'class': 'uk-list uk-list-divide'}} ] ); Here is a screen shot of the custom styles dropdown: So in my case I didnt find it difficult to add styles1 point
-
I thought I'd chime in and answer some questions first and foremost as I saw people chatting about this here. We initially moved because we wanted to add some functionality that would have cost too much to develop. My biggest issue myself is that I am not a developer (i'm a tinkerer) and I wanted more advanced product pages, etc. Yes, they could for sure have been built in processwire but I felt that for someone like myself who is not a code guy, I was too limited by the product as I simply don't have the time to learn enough PHP to code and hiring a developer to do work i could theoretically do myself with wordpress seemed like a waste of money. So those were the initial motivations for moving. Now that we've moved, however, the whole "grass is greener" effect has faded and I have some regrets, however, the extra functionality has allowed us to make more sales and bring on new customers that we didn't have before. So it's a catch 22 for me. I'll expand more on this further down. I don't think this is a fair statement, frankly. The initial point of our website was to view things from an end users point of view, not that of a seasoned developer. Our reviews don't go into how easy it is to code with something but rather how easy it is to use, how functional, etc. These are the things most of our readers want to know as we tend to get a lot of traffic from those who are looking for software but don't have a development background. Yes, this grade sucks. Part of the issue for me is again, I'm not a developer so we clearly need to work on things. This is good to know, please do tell me what specifically you feel is missing so we can fix it. ProcessWire is an awesome product and Ryan did a ton for us. Ideally, I would have loved to have simply paid him to make everything we have now work on PW. If that was a possibility and the cost wasn't too high, I would have gone that route. Sadly, it just isn't feasible sometimes and I often look for alternative ways to compensate those who work for us. Before our move to WP, the intent was to search out vendors who were willing to take on the task of building our site on their platform in exchange for an agreed upon advertising term. In other words, they build our site on their platform (which is a bonus as then their product gets noticed more, as was the case for processwire) and in exchange, we offer advertising for an agreed upon term as the form of payment. With the case of PW, however, this didn't work and we needed to pay for the development costs up front which, while worth it since Ryan is so awesome.. tend to get costly when every tweak needs a developer. If I'm able to find someone with a development house who wants on the advertising in exchange for work method, I may be able to pull off a move back to PW but until then, I may have to search out other alternatives. Fortunately, there are plenty of companies that are interested in doing this but I'm picky so moving is a decision that I need to consider deeply. Normally I wouldn't share these kinds of details to this extent but I feel I owe this community, which we've been part of for a long time, an explanation. So here's the pitch: If there's anyone out there who wants to take on the task of making what we need a reality and getting long term advertising for their business in exchange, drop me a line. Until then, the search for an alternative may continue as WP simply seems to be causing too many issues and bloat (I should have seen this coming granted but hey, nobody's perfect and a critic isn't always right). Thanks for reading Mike1 point
-
Marek747, All languages have their ups and downs. "Language X is better than language Y" is just about as far from valid argument as you can get. For an example, if speed is your first goal and popularity second, it would make most sense to forget node.js, RoR, and any given framework for that matter (they always add some extra overhead) and go with plain C instead (although that's just about as "old-school" as you can get). C is widely acknowledged as one of the most popular programming languages (TIOBE, IEEE Spectrum, etc.) and it's definitely the go-to language if you want superior speed. That being said, web applications built on top of C are (to my best knowledge) very rare, and some developers would argue that it's not exactly an easy language to master. Just for comparison, something like Ruby (and Ruby on Rails, which is a framework you mentioned) is designed from a very different point of view: it was originally known to be very "hip", very comfortable to work with.. and extremely slow. (I'm assuming they've improved those figures since then – that was quite a while ago – but Ruby is still hardly your best choice if you need top notch performance.) If you want a language that's comfortable to work with, good for web application development (I'm assuming that's why you're here), and widely supported, go with PHP or Python. PHP is more widely used, which makes it a good choice. It's also ugly, inconsistent, etc. but a lot of developers have learned to live with those flaws because it's good at what really matters: getting shit done. Note: I'm not saying that JavaScript and/or node.js is a bad choice, but they're not quite as popular or well-established yet, and the future of the web is bloody hard to predict. It's definitely good to have knowledge of them, but in my opinion they're not quite there yet. Perhaps one day they'll power all the popular apps around, or perhaps they're a fading trend, nobody really knows.1 point
-
Greetings, Ah, the code war sees a battle here on the PW home front! This has been raging on for a long time. You don't have to choose all or nothing with languages. My own history is with C/C++, and over the past year I have been spending time learning Python. After a while, you start seeing the same underlying principles in each one. PHP is perhaps more "messy" than other languages. You don't have the same level of agreement in PHP as you see in the Python, Ruby, Java, or .NET worlds. All of those other languages have rallied around a set of conventions, frameworks, and more. Fewer conventions and many more frameworks makes PHP more confusing at first. But that's also what makes PHP so lively and flexible. Thanks, Matthew1 point
-
I don't know if PHP is wrong or something ... note that i am not a web developer or programmer ... i am just trying to learn some basics in codecadamy right now and then decide which direction to go ... nodeJS is cool right now and has got some benefits like it outperforms PHP in speed ... at the same time I like PW, so i wonder what to focus on in the future.1 point