Jump to content

Leaderboard

Popular Content

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

  1. InputfieldMailChimpCampaign This is the very early state of a basic Inputfield & Fieldtype for creating & updating a MailChimp campaign. What it does: on create Creates a campaign on MailChimp Sends the url of the page (where the inputfield lives) to MailChimp and uses that page as campaign. Attache a mailing list to your campaign. Add several settings. Upon save ( check update on MailChimp checkbox ), let MailChimp pull a text-version of the campaign-page and store it on MailChimp. on update Update all previously set settings except the campaign ID Create a new text vesion of the campaign What you should know: Your page must be reachable from the internet. And your page must be in a published state. It's just pushing values from ProcessWire to MailChimp. Settings changed in MailChimp self will get overwritten upon page save. It's only handling campaign create & update. Send functions are not included. You can download it on github. --- note: It's in development state.
    7 points
  2. This module tracks changes, additions, removals etc. of public (as in "not under admin") pages of your site. Like it's name says, it doesn't attempt to be a version control system or anything like that - just a log of what's happened. At the moment it's still a work in progress and will most likely be a victim of many ruthless this-won't-work-let's-try-that-instead cycles, but I believe I've nailed basic functionality well enough to post it here.. so, once again, I'll be happy to hear any comments you folks can provide https://modules.processwire.com/modules/process-changelog/ https://github.com/teppokoivula/ProcessChangelog How does it work? Exactly like it's (sort of) predecessor, Process Changelog actually consists of two modules: Process Changelog and Process Changelog Hooks. Hooks module exists only to serve main module by hooking into various functions within Pages class, collecting data of performed operations, refining it and keeping up a log of events in it's own custom database table (process_changelog.) Visible part is managed by Process Changelog, which provides users a (relatively) pretty view of the contents of said log table. How do you use it? When installed this module adds new page called Changelog under Admin > Setup which provides you with a table view of collected data and basic filtering tools See attached screenshots to get a general idea about what that page should look like after a while. For detailed installation instructions etc. see README.md.
    3 points
  3. Nearly all built-in Fieldtype functions are passed a copy of the $page and $field being edited. So you pretty much always have a copy in your Fieldtype. For example, every Fieldtype has this function: /** * Return a new Inputfield, ready to be used * * @param Page $page Page being edited * @param Field $field Field that needs an Inputfield * */ public function getInputfield(Page $page, Field $field) { // $page is the Page you want } Since there is only 1 copy of any given Fieldtype in memory at once, you don't want to keep any copies of $page outside of the individual functions because the same Fieldtype instance might get called several times for different pages within the same request. Inputfields are different: They aren't supposed to know anything about the page being edited, because Inputfields are used for far more than just pages. There will be multiple instances of the same Inputfield in memory at once. Basically, there is a new instance of it for every single input that's needed. Unlike Fieldtypes, Inputfields don't get reused for multiple fields of the same type. Since Inputfields aren't supposed to have a $page context, they don't already have a copy of it anywhere. However, if you need one, you can pass it a copy from your Fieldtype's getInputfield method, shown above: /** * Return a new Inputfield, ready to be used * * @param Page $page Page being edited * @param Field $field Field that needs an Inputfield * */ public function getInputfield(Page $page, Field $field) { $inputfield = wire('modules')->get('InputfieldSomething'); $inputfield->set('editPage', $page); // give it a copy of $page being edited return $inputfield; } Now InputfieldSomething can access the $page from $this->editPage. This is what FieldtypeRepeater does for InputfieldRepeater, btw.
    3 points
  4. I've updated it so that it can now support using formatted values before concatenation--like you would want with dates. Grab the new version (1.0.1). Then, in your format string, just specify an exclamation point after any field names you want to use the formatted version for. For example, "title, date!" rather than "title, date".
    3 points
  5. Hi roelof, I think Joss is right here. I think you'd be better off by first getting familiar with the system and only then starting to think about the different approaches you could use to build your site with PW. Joss provides a link to an excellent tutorial that will most definitely help you get acquainted with PW. Here are other resources you might find useful: Small Project Walkthrough: a simple and easy to follow tutorial that will teach you the basic concepts behind PW. ProcessWire's Wiki Page: some very useful articles here as well, including the tutorial Joss mentions. A very brief introduction to PW's API: this is a must read. ProcessWire's directory structure: it's important that you read this one, as it will make your life so much easier! ProcessWire's template files: again, a must read. ProcessWire's API index page: make a bookmark of this one and visit frequently! So, there you have it, a nice list of easy-to-follow articles you can read to get intimate with ProcessWire. Once you've gone through that, you will have a much clearer picture of what you can do with PW and how to do it. I hope that helps. Claudio
    3 points
  6. This is great Martijn! Interesting approach with using a fieldtype I never really thought of. As you've seen the other thread, I'm working also on a MailChimp integration myself. It was for a project of a friend who needed an newsletter and I first started creating some self brewn but abandoned it because handling of all the nice features and sending batch mails would get to tedious if not impossible at all. It's at best would have been only for really small amount of mailings. However I then decided to give MailChimp a try and changed the whole module to implement MC. It consists of a bunch of admin pages that gets setup when installing, where you can manage your campaigns and lists and select a page or enter a url for the newsletter to be used and the list. Then do test sends or final send. After sending you can see the stats of the campaign. So far it's working great but I planned to integrate, groups and segments too for creating campaigns which allows for using lists more flexible as you can't create new lists through API. My friend is using it now for a simple newsletter but I'm still working and reworking a lot of how it works and implement more features. I hope to share my module, but I think it's still not ready yet and takes some more time. I think why not have two different modules for allowing MailChimp in PW? It's great to see and have two different approaches and further we could share thoughts and experiences. I'm not sure we could stick together and go for a bigger project? Or what do you think?
    3 points
  7. Nik's AfterSaveActions module is also a great time saving optimization for when you are creating pages, templates, fields. I was using it just yesterday on a site where I needed to add a hundred or so pages via copy/paste (the content was too inconsistent in order to automate it with something API-driven). I set my 'after save action' to 'create another sibling page', and it probably cut the time it would have taken in half.
    2 points
  8. Well, the first thing is to actually try it so you understand the basics of how it works and how all the elements work together. This is a tutorial that will take you through all the basic elements of how processwire works: http://wiki.processwire.com/index.php/Basic_Website_Tutorial Once you do that, and have a better idea of the system, then you will be able to ask specific questions that will help you create your site. Good luck Joss
    2 points
  9. Hi roelof, Welcome to the forums. ProcessWire is a very flexible and extremely powerful CMS, and I firmly believe it can be used to build all kinds of websites, from simple portfolio sites to highly complex news sites. In my experience, when it comes to PW, sky is the limit! As netcarver mentions, you need to be a little bit familiar with PHP to make the most out of it, but that doesn't necessarily mean you need to learn PHP before starting to use PW. In fact, I've found that using PW is in and of itself a great way of learning PHP. As long as you're able to understand the most basic PHP concepts, I think you can pretty much learn all the rest as you go. If you get stuck somewhere and need help, the community is here to help. So, my advice would be to give PW a try and see first hand what you can do with it. Best of luck. Claudio
    2 points
  10. Another ProcessWire site is online: http://www.christophkunz.ch I'm using the awesome blog profile as base. Today I showed christoph the Pw-Admin – so simple and easy to use, I think he'll love it. (The previous site was running on modx). Credits to ProcessWire here: http://www.christophkunz.ch/impressum/ Any feedback is appreciated, it's not 100% finished yet Cheers
    1 point
  11. I had to import over 500 of members as pages into PW, so i am using the Import Pages module. I wondered why a lot of members are imported without their birth date and i found out that the module seems to import one date format wrong: I was using the date format dd/mm/yyyy in the CSV - but it seems that it was imported as mm/dd/yyyy and the dates which have a day higher than 12 were not saved. In PW FieldtypeDate everything seems to be fine, i guess there is just a problem in the Import module. Now i changed the CSV to dd.mm.yyyy, changed the date to the same format in the PW date field and everything is imported correctly.
    1 point
  12. Greetings, I have played with various template engines, and I agree that Twig is better than others. I've also tried Smarty. There was a time when I believed I had to do one of these because "there are people who don't want to use PHP." But these days, I don't believe this any more. Instead, I believe that using a CMS like ProcessWire makes it possible for "regular" people to deal with PHP. One of my main attractions to ProcessWire is that there is an attitude that template engines are not necessary. Maybe it's just me, but no matter how good a template engine is, it's just another thing to learn. And because there are several template engines, choosing one runs you the risk of creating code that is not as "universal" as PHP. I understand that in some agencies there are designers who don't want to deal with PHP. But the best of all worlds -- it seems to me -- is to use a CMF like ProcessWire (or a framework like Laravel and CodeIgniter), whose syntax is clean and expressive, thereby making a template engine unnecessary. Thanks, Matthew
    1 point
  13. @joss - here is an example function for rendering a full top bar with bootstrap. https://gist.github.com/4699020
    1 point
  14. Wow, great! Thanks ryan! (Do you ever sleep?)
    1 point
  15. You might find the attached LazyCronTest.module helpful. This basically just demonstrates LazyCron in action. Install this module after LazyCron is installed, and it'll record a log entry every 5 minutes (or so) to /site/assets/logs/lazytest.txt. That's assuming the site is getting non-cached pageviews so that LazyCron gets a chance to run. LazyCronTest.module <?php class LazyCronTest extends WireData implements Module { public static function getModuleInfo() { return array( 'title' => 'Lazy Cron Test', 'version' => 100, 'summary' => 'Tests lazy cron by writing to a log file in /site/assets/logs/lazytest.txt', 'singular' => true, 'autoload' => true, ); } public function init() { $this->addHookAfter('LazyCron::every5Minutes', $this, 'lazyTest'); } public function lazyTest($event) { $seconds = $event->arguments[0]; $log = new FileLog($this->config->paths->logs . 'lazytest.txt'); $log->save('LazyCron 5 minute test - ' . date('Y-m-d H:i:s') . " - $seconds seconds"); } } Here's an example of the log file it generates: 2013-02-02 11:19:02:LazyCron 5 minute test - 2013-02-02 11:19:02 - 356 seconds 2013-02-02 11:24:04:LazyCron 5 minute test - 2013-02-02 11:24:04 - 302 seconds 2013-02-02 11:31:52:LazyCron 5 minute test - 2013-02-02 11:31:52 - 468 seconds 2013-02-02 11:37:22:LazyCron 5 minute test - 2013-02-02 11:37:22 - 330 seconds 2013-02-02 11:43:14:LazyCron 5 minute test - 2013-02-02 11:43:14 - 352 seconds 2013-02-02 11:49:13:LazyCron 5 minute test - 2013-02-02 11:49:13 - 359 seconds 2013-02-02 11:54:37:LazyCron 5 minute test - 2013-02-02 11:54:37 - 324 seconds 2013-02-02 12:00:07:LazyCron 5 minute test - 2013-02-02 12:00:07 - 330 seconds 2013-02-02 12:05:07:LazyCron 5 minute test - 2013-02-02 12:05:07 - 300 seconds 2013-02-02 12:12:42:LazyCron 5 minute test - 2013-02-02 12:12:42 - 455 seconds 2013-02-02 12:18:35:LazyCron 5 minute test - 2013-02-02 12:18:35 - 353 seconds 2013-02-02 12:23:37:LazyCron 5 minute test - 2013-02-02 12:23:37 - 302 seconds 2013-02-02 12:30:54:LazyCron 5 minute test - 2013-02-02 12:30:54 - 437 seconds 2013-02-02 12:36:22:LazyCron 5 minute test - 2013-02-02 12:36:22 - 328 seconds 2013-02-02 12:41:57:LazyCron 5 minute test - 2013-02-02 12:41:57 - 335 seconds 2013-02-02 12:50:48:LazyCron 5 minute test - 2013-02-02 12:50:48 - 531 seconds 2013-02-02 12:56:58:LazyCron 5 minute test - 2013-02-02 12:56:58 - 370 seconds 2013-02-02 13:03:03:LazyCron 5 minute test - 2013-02-02 13:03:03 - 365 seconds 2013-02-02 13:15:03:LazyCron 5 minute test - 2013-02-02 13:15:03 - 720 seconds 2013-02-02 13:26:03:LazyCron 5 minute test - 2013-02-02 13:26:03 - 660 seconds 2013-02-02 13:31:46:LazyCron 5 minute test - 2013-02-02 13:31:46 - 343 seconds 2013-02-02 13:37:37:LazyCron 5 minute test - 2013-02-02 13:37:37 - 351 seconds Notice how the number of elapsed seconds is always more than 5 minutes (and sometimes a lot more). That's just because it has to be triggered by a PageView. In most cases, this is okay because a lack of pageviews usually means there's nobody there to see what was updated anyway.
    1 point
  16. This was the information I was looking for. Love to see some insights I never thought of before. Always great to see how you explane things & take your time to answer these questions! Thank You ryan. note: I did use your code 1 on 1. ( Hope to release MailChimpCampaign next weekend )
    1 point
  17. That's a good idea. Though I'd still be nervous about it. Something to think about adding though... One way you can override things on your own is to edit the Fieldtype module file that you want to convert from. So if you've got a float that you want to convert to a string, edit /wire/modules/Fieldtype/FieldtypeFloat.module and add the following function to it (temporarily): /** * Return Fieldtypes that are compatible with this one (i.e. ones the user may change the type to) * * @param Field $field Just in case it's needed * @return Fieldtypes|null * */ public function ___getCompatibleFieldtypes(Field $field) { $fieldtypes = new Fieldtypes(); $fieldtypes->add($this->fieldtypes->get('FieldtypeText')); return $fieldtypes; } If the Fieldtype you are editing already has that function, that you could just modify it according to what you need.
    1 point
  18. Thanks for the links Alan. Just one correction. Sublime Text is not from Will Bond, he "only" made some packages for it. The developer of ST is a guy called Jon Skinner.
    1 point
  19. Great stuff Martijn. Didn't test it yet, but interested to hear how it works. You add this field to a template, and this template becomes a newsletter. You can choose mailing list for the newsletter and the content comes from the actual page(?). Can you send the newsletter through PW also?
    1 point
  20. I once heard that you should use integers for these kind of data, as in instead of $3.256 you'd have 3256 fractions of a cent (and do int calculations with that)
    1 point
  21. Just to make sure: are you actually trying to run code under the hood or perhaps just refresh the browser window at specified interval? If your intention is just to reload / refresh the browser window, you'd probably want to use JavaScript or meta refresh tag for that. Cron (whether lazy or regular) is intended to run code under the hood at regular interval, but it won't directly affect browsers / clients viewing the content. If your application needs to fetch content from somewhere (such as Google Calendar), you could use a combination of lazy cron and JavaScript to achieve this, though lazy cron part would be somewhat irrelevant as long as this is just a proof of concept. For the time being you could also have your page check for new content on each page load. If you're interested in taking this concept a step further, you could also take a look at something like https://github.com/viljamis/Remote-Preview/ as a reference project. It has certain similar features to what you're building here (unless I'm completely mistaken) - primarily that it updates client machines browser window on an interval. The thing that makes Remote Preview feel more sophisticated is that refresh is only toggled if an AJAX query to a text file containing an URL confirms that it has changed since previous reload. Difference between that approach and a plain meta tag / JavaScript refresh isn't huge, but it definitely makes it seem more elegant
    1 point
  22. Version control is on the roadmap, but in the meantime a way you could theoretically go about it is to write a module that dies something like this: 1) If the user has permissions to edit without approval, page saves as normal 2) If they need approval due to user group, a module creates a child page (so hook before page save to stop saving the real page), mark child page as hidden & unpublished and email whoever you need 3) You would then need a button oj the child page where the authorising user can click to merge changes back to the parent - this would again trigger before page save, replace the parent page with the value of the child page and delete the child page Problem is you've not really created a useful version control system but rather just a simplified approval system plus there's no comparison in there (you would probably want a diff function in there that opens the content side by side in a modal window highlighting the changes). Soooo... it's a complicated prospect to say the least with many ways if approaching it
    1 point
  23. I have looked into it, and I cant get it to work.. Maybe Im going blind, og just loosing my mind and brains.. In this case there is not a lot of trafic, Its a info screen with, times, locations and classes. But its the proof-of-concept, that a digital signage system can be made, and run from processwire.. And in the future, the "player" client must be known by the master server.. have a peek: http://sign.chrisb.dk/ this is powered by: google calender loader, Color picker, Repeater, LazyCron (in the future) and Page Render IP restriction. And the player is a Raspberry Pi, running Raspbian and booting Chromium into kios mode, and it runs very smooth.. Except the Cron stuff.. But, maybe I chould have a look into the regular cron ping solution.. Hmm.. Ill be back... PS.. Im allways getting a smile on my face, and a lot happyer, when I see your big smile in your profile pic Ryan.. And thanks for that.. // Cheers...
    1 point
  24. Nico, you designed such a nice theme only some weeks ago... but yep, it looks great
    1 point
  25. Thanks for the Flourish suggestion - I did recently see something about it, but hadn't investigated yet - looks like it could come in quite handy. I know it's been said before, but the community on this forum really is about the best I've ever experienced. I am looking forward to being able to give something back very soon.
    1 point
  26. Hi Roelof, welcome to the ProcessWire forum, you'll find quite a few Textpattern users in here! At least, I seem to remember a roelof from the TxP forum with a domain similar to that one but my memory is not what it used to be. Anyway, if that is you and your site is running on Textpattern then you should be OK with ProcessWire. I haven't yet come across anything that I did in Textpattern that I can't do with ProcessWire (and usually much more easily too.) Edited to add: But, it does take knowing some PHP as you'll need to use PHP in your template files.
    1 point
  27. Take a look at fNumber and fMoney from the Flourish library if you need something to ease working with these kinds of data. And here's a how-to for autoloading Flourish from your template files should you choose to go down that route.
    1 point
  28. Glad you solved it! Just a little remark: No need for the first line, in your templates you already have a variable $user for the current user: $organization = $user->organization->first()->name; Cheers
    1 point
  29. Do you mean a <select> / dropdown menu? You can create this with the "Page" Fieldtype. Under the Input tab, you can choose the "Input field type" as "select". The options to choose are pages, so you want to create those somwhere in your page tree.
    1 point
  30. A page does not need to have two parents of the same generation like we do. In the case of ProcessWire, all pages are female.
    1 point
  31. I can't reproduce. The only thing I can imagine is that you have (according your code) a "multiple pages" page type, but using a single "Select" as input? This can mess up thing if you changed those setting at one point of time. Try changing the inputtype to "ASMSelect" and look at what is there. If there's more than 1, delete them and change your page field to be only "single page" if you really only need single select.
    1 point
  32. What are folks wanting to store in these float fields? If you want to store what would be monetary values then I'd suggest avoiding floats or doubles like the plague. Go with fixed-point values which are usually strings which you manipulate with PHP's bc maths functions. MySQL also supports fixed point numbers using the DECIMAL() type. Contrary to popular belief, floating point numbers (including doubles) are *extremely* inaccurate number representations. Where floats and doubles shine is where you have to store values from a huge *range*; but they do it at the expense of accuracy. They are almost always inaccurate approximations of the value you want to store.
    1 point
  33. I'm guessing you don't like Laravel much? There is a reason why statics exist as a language construct, and there is a reason why we use them where we do. Though our usage is admittedly rare, there has never been a goal to "avoid statics as much as possible". The goal has been to use the tools available to us to make ProcessWire as simple, flexible and extendable, to the intended audience, as possible. It's not often that we have use for a static method in ProcessWire, but when we use them it's because they are the most appropriate solution. Keep in mind, we don't actually "need" static methods. We could certainly do without them. They just make a whole lot more sense in our context than the alternative. It's important to realize that Module is just an interface for communication between ProcessWire and the functionality you want to provide. It is not a class or even an abstract class. It provides no implementation for you (other than what you might optionally choose to extend from some other class). The only requirement for a module is that ProcessWire can ask it what it is. That comes from the Module interface's 1 static method: getModuleInfo(). Without that, it is not a Module. The ConfigurableModule interface has 1 static method: getModuleConfigInputfields(), which you can choose to delegate elsewhere if you choose. Beyond the obvious benefits, these methods are static for correctness: they are about all instances, not a specific one. The existence of the interface is not a suggestion that you implement everything in the class itself. That's entirely up to you. If the scope or philosophy of your need is such that you want to split every part of it into separate classes and files, then you should (this is what I do in FormBuilder). The Module interface facilities this. But the reality is that most modules are not of that scope, and there's rarely a tangible benefit in our context to being more verbose. But we ultimately leave that choice to the developer. A module is a singleton only if the developer specifies "singular" in his/her module definition. Otherwise you will get a new instance every time you ask for a module. I understand what you are trying to get at here. There may be someday when the configuration needs of modules increases in scope to the point where we might benefit from such an approach, but we're not near that yet. In the present, I think the majority of module cases benefit more from less verbosity and the current approach. We already have the door open to this approach, even if it's not implicit--FormBuilder uses something very similar, for example. But I would be happy to support this more implicitly as a second option for module configuration in the future. Instance types are not loaded before they are needed. They are loaded on-demand, unless the module's definition specifies "autoload". ProcessWire caches its module information so that it doesn't need to even include a module's file until ready to instantiate. It's the module developer that should make the call about whether their module is designed to be singular or multi-instance. A singular module might very well be coded differently than a multi-instance one. I don't want the consumer to have to think about this variable. I'm not opposed to making architectural changes in major releases so long as they are geared at make things simpler or easier for the users of the software. While I don't share all your opinions on how some things should work, I appreciate and respect them, and am especially glad for your interest in them. If we were to implement an architectural change to make module configuration more implicit to a separate class, I'd support it (after all, it's an approach I already take in some modules). But it would be added as an option, rather than a replacement. In terms of future major releases, I don't like breaking backwards compatibility unless absolutely necessary. But if there's a net benefit to the wider audience, then I have no problem with it. The only thing in my mind that carries that status right now is the switch to namespaces in 2.4 (and the changes that would go along with it), which I'm looking forward to collaborating on.
    1 point
  34. Love this! Want this! Need this!
    1 point
  35. Good point, but I wonder whether this behaviour could be overridden during development, perhaps by enabling any field type changes when: $config->advanced = true;
    1 point
  36. Starter version updated - see note on OP
    1 point
  37. Would it be somehow possible to display a date field formatted in a concat field? This is displayed as timestamp at the moment.
    1 point
  38. It's funny how rather simple means often seem to work pretty well in terms of avoiding spam. I don't know if the comment form in Textpattern still works the way it used to by default. It simply did not emit a submit button at first, but a preview button. Once you hit preview, the preview button turns into a submit button, enabling you to submit your comment. And since spam bots can't click …
    1 point
  39. Hey guys, I've created an initial ProcessWire bootstrap repository if any of you want to use it. Try this, branch it out, do whatever you want with it. https://bitbucket.org/thatgibbyguy/base_html5_processwire The features of this bootstrap are: HTML5 Boilerplate Modernizr/HTML5 Shiv Javascript Libraries: Twitter Bootstrap Javascript Library jQuery-1.8.2 jQueryUI-1.9.1 jQuery.fittext.js jQuery.mobile-1.20 jQuery.scrollto-1.4.3.1 retina-0.0.2 CSS/LESS Frameworks: font-awesome (not 3.0 yet) KUBE Grid (in LESS) Twitter Bootstrap Library (in LESS - library.less) Base LESS file (style.less) Key changes to Ryan's initial download are just that I took each one of his calls and abstracted them out as includes. So Ryan's functionality has been abstracted into the following includes: Breadcrumbs -> breadcrumb.inc Page Titles -> pagetitle.inc Random Image -> randomimage.inc Search -> search.inc Sidebar -> sidebar.inc For example, to add the breadcrumbs to your site, simply include it in your markup like so: Also included is Soma's Markup Simple Module.
    1 point
  40. Tyssen, I think that is the cleanest solution, if you want to support multiple categories per product. Multiple urls for same content: yes, possible seo problem, but as far as I know with using canonical url meta tag you can avoid that: http://googlewebmastercentral.blogspot.fi/2009/02/specify-your-canonical.html Of course one url should be the "real one" where others refer.
    1 point
  41. Install NetTuts Fetch plugin. Use super+shift+p and find "Package Control: Install Package" enter and search for "Fetch", select and hit enter to install it. Tutorial here: http://net.tutsplus....-nettuts-fetch/ Use http://gist.github.com to post snippets and load them in when needed. Very handy. I often use the module template I created here: https://gist.github.com/2732707 Just enter it as for example "PW Module Template" to the config of the Fetch package, open command console super+shift+p and enter "fetch", you'll find 3 commands, select "Fetch: file" and select the entry from the list hit enter and it loads the code into the caret position. Start coding your module.
    1 point
  42. I just can't see how ST2 can be bettered right now. I used to like Coda and Textmate and they're fine but ST2 just saves me so much time. The multiple selection commands, go to anything commands, select next etc Coding is just so fast with it, also the program itself is blistering, I've no idea how the developer manages it but it's everything is just so fast. At the very least worth trying out for those who haven't used it.
    1 point
  43. many host.not have git but if do you can mine host no have git so i do in ssh cd public_html wget https://github.com/ryancramerdesign/ProcessWire/archive/master.zip unzip master this unzip master make some dir call ryancram... [blahblahblah] (somethin like), so remember for when i show [ dir made by unzip ] mv wire wire.olden that.make backup if we need , now move new one to reeplace mv [ dir made by unzip ]/wire ./wire and move htaccess if needed [ usually not ] mv [ dir made by unzip ]/htaccess.txt ./.htaccess get rid of [ dir made by unzip ] and the zip rm -r [ dir made by unzip ] rm master.zip check site working all good? deleted wire.olden rm -r wire.olden
    1 point
  44. First of all, don't worry too much, you will normally find all the problems after launching Here are some of the things I try to do before launch : - Check the page titles and meta descriptions. Install the Google webmaster tools to get more useful advice on how to optimise the site for search engines https://www.google.c...ebmasters/tools - Create an xml site map and submit to Google (via Webmaster tools) and Bing (http://www.bing.com/toolbox/webmaster) - If this is the an update of an existing site, setup redirects for old pages to new pages - you can check what old links are currently indexed by Google and start with the top ones. The redirect plugin is great for managing this (http://modules.proce...cess-redirects/). - Check and update the 404 error page - Check that all your forms are working and being delivered to email recipients (not stuck in spam). - Change the admin url from /processwire/ to something more secure - Turn off any debug modes - Disable any test accounts and put an extra secure password on the master account. - Check what print layout looks like (or make print style sheet) - Browser testing - this is tough one to summarise - there are some sites that let you take screenshots, but the best way I have found is to have multiple virtual machines with IE7, IE8 and IE9 which can be used for more detailed testing and debugging. Then there is mobile device testing! - Check for broken links and correct redirects. http://validator.w3.org/checklink - Performance testing - you might want to check for any big performance issues. ySlow is a nice tool for checking and provides some good tips that might be useful for speeding up the site. Don't be too disheartened by the results, not even the big sites get top marks. http://developer.yahoo.com/yslow/ - Setup analytics to track usage - Google analytics - Setup monitoring so you know the site is up and running - I really like pingdom.com - https://www.pingdom.com/ - Backup the site files and database! Then I like to say a little website launch prayer… "dear internet gods, I know things will go wrong but please let the issues be small and easy to fix. amen."
    1 point
  45. I wouldn't do it that way though if it's going to be the case that you have pages in multiple locations a lot of the time. Take for example your first structure - most ecommerce packages would handle this y creating the category structure, then adding products and ticking a box in a category lost to assign that product to multiple categories. When browsing the structure you would have a URL of vacuums/wet-vac-cleaning-solutions and under that it would list your product, but when you click on the product it would appear at a URL of something like products/super-clean-2000 I would suggest handling it this way as well, as I'd you use redirects you're essentially taking the user from one category to a completely different category which would make them a bit confused I think. As such, I would make the structure of your categories under a page called "categories" and create a template for those pages called "category". Then create a page called "products" and a template called "products" for it to use. The product template would need a field called "categories" that uses the Page fieldtype which is set up to allow selection of all pages under the category page. You then simply add products and select the categories they appear in When editing the front-end categories template to show the relevant products in that category you can simply use a selector to find all products that are in that category. Sorry, that's a whistlestop tour of how I'd recommend doing it and doesn't sound simple, but it is pretty easy in reality and not as daunting as I've probably just made it sound
    1 point
  46. Thanks for posting that Alan, I've also updated the opening post to make it a little clearer too.
    1 point
  47. I changed fields to double and it works nicely. We actually need them to be floats rather than text since we want easily get queries like: all the events in 60km from this point, please. Interesting thing when changing to double: 24.9194 => 24.9194049835205. That cannot be real value, since my original data source (last.fm) had those with 6 decimals. Or maybe mysql have some mystical superpowers and internal location database
    1 point
×
×
  • Create New...