Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 09/08/2016 in all areas

  1. Prototype up & working Will try it for a while and add it to the next release.
    4 points
  2. If you need an easy way to backup the db, you can use the module called Database Backups (its class is ProcessDatabaseBackup, not installed by default but made by Ryan and works with ProcessWire 3.x too). With a few clicks we can have a snapshot in /site/assets/backups/database/ . I always use it before updating or installing modules and/or a new version of ProcessWire (update).
    3 points
  3. REMOVED Free Processwire Template
    2 points
  4. Trekkerweb Supply & Demand https://markt.trekkerweb.nl/ Trekkerweb.nl brings agricultural mechanization news and supply & demand together in a single online platform for all the tractor and machine enthusiasts and others interested in the mechanization sector. The site is multi-language with English as default. None Dutch browsers will get the English version of the site, currently we are finetuning the German version which will be available somewhere in the near future. The search page in English and Dutch language - https://markt.trekkerweb.nl/search/ - https://markt.trekkerweb.nl/nl/zoeken/ Used modules Profields Table Profields Textareas MarkupLoadRSS (fetches brand related new from the main website) PageImageManipulator 2 (PIM2) (for placing watermark image) ProCache ProcessGetVideoThumbs TextformatterVideoEmbed WireMailSmtp LanguageSupport (Site is multi language: Dutch, German and Default English) Couple of custom made modules for user profiles and cross page linkage of the datamodel (Bower) components awesome-bootstrap-checkbox bootstrap-dropdowns-enhancement-sass bootstrap-sass bootstrap-select font-awesome formvalidation.io hashids jquery jquery-file-upload jquery-throttle-debounce jquery.mmenu js-cookie lifestampjs moment semantic-ui-sass verge Front-end user profiles (custom module) Account registration Customizable fields (in module settings) Per field privacy configurable (private, public, on a per user basis). Front-end login/ logout Reset password Email activation for account Request activation mail View profile Public profile Edit profile Set profile picture (cover image and avatar) Modify password Language choice Profile dashboard Front-end Ads management Create new ad Edit existing ad Manage media (images / video) Preview and approve ad Remove ad Data model Categories Subcategories Brands Input fields Options An intuitive data model drives the whole site. A couple custom made modules take care of the cross page assigning of categories to subcategories and brands. Per subcategory we are able to assign the related input fields and options which will be rendered on the 'Create new ad/ Edit ad' form page and combined with the given values rendered on the ad detail page. Database caching + Pro caching One of the challenges was to keep the whole project as low weight as possible. Since the data model with categories, subcategories, brands, inputfields and options is the backbone of the site we came up with the solution to have the names, titles, ids, and relations between them cached. Completely as json/javascript with pro cache and separated with database caching. With the Wire Fuel we made the $dm object available for accessing anywhere in PHP and globalJS.dm from within javascript. This means the whole data model is called only once per request, and while it exists in the database cache and pro-cache it is incredibly fast. Subcategory page The first image shown below represent one of the subcategories (Tractors) with assigned categories, brands, input fields and options. The image there after is a screenshot of the add ad page, where the input fields, options and brands are dynamicly rendered after being loaded via Ajax. Other features cookie based favourites cookie based last-viewed list advanced filter search related ads Thanks to the whole team (Ferdi, Bastiaan, Alex, John, Hessel) and last but not least Ryan for creating ProcessWire and all module developers out there
    2 points
  5. Tweaked, although I still like the "Toggle All" out on its own. I have also cleaned up the time/size values at the bottom of all panels - very simple now with no superfluous text.
    2 points
  6. Looks more usable to me. I see some room for improvements, eg. move the Toggle All to the panels list as first item (plus make it bold to add some weight). I think no need to pull it to left as now. Disable Tracy could go to the far right, in the same row as the 3 other buttons (Once, Sticky, Reset) the top legend below the main title ("Temporarily enable/disable...) could go into one row, separated by eg. this: " • ", or float the second line to right Plus when Tracy is disabled, its icon's position overlaps with the scrollbar (when AOS is active). Using "right: 10px" seems too small, around 20-24px this could be eliminated.
    2 points
  7. Well at first using CSS3 column-count could be handy for the panel list here. Eg. 2 columns, then the panel would be more than 2 times wider. You could also use CSS "all: initial;" to reset all styling - of course then you will have to re-style everything. Better saying you have more important things to do than beautify the admin
    2 points
  8. Have you looked at BatchChildEditor: You can move the interface to anywhere you want - either part of the Children tab, the Content tab, or even its own tab. You can predefine field pairings for the CSV columns to PW fields, etc. In Update mode it will update existing PW pages. You can also choose from Add and Replace modes depending on your needs. Maybe it might be helpful?
    2 points
  9. hi tpr thats a great idea and has always annoyed me to need so much effort for only enabling justify buttons... thanks a lot, looking forward to it
    2 points
  10. Check out the brilliant Paginator by @LostKobrakai: https://github.com/LostKobrakai/Paginator/ I mentioned Paginator in a post yesterday but I hadn't used it at that point. I've just tried it out and it works a treat for when you want to paginate the results of two or more $pages->find() operations. There aren't any detailed instructions yet but the example in the readme should be enough to go on. So for your case you want to avoid the foreach and instead create two separate selectors for use in Paginator. Something like: include 'src/Paginator.php'; include 'src/PagesPaginator.php'; $paginator = new PagesPaginator(); $result = $paginator(array( "template=property$selector, address~=$locality, sort=$sort_order", "template=property$selector, !address~=$locality, sort=$sort_order" ), $input->pageNum, 25);
    2 points
  11. Just wondering why you would need to do this. A PageTable field does not necessarily include all the children of a given parent so the contents/order of the field could never match the children in all circumstances. I would have thought that if you create a PageTable field then you interact with its pages via the field (whether we're talking about the API or the admin interface) rather than the page tree. Personally, I always store my PageTable pages under the admin branch so they're not visible/confusing for clients.
    2 points
  12. http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc
    2 points
  13. This module provides a solution for keeping various site settings in one place (titles, slogans, api keys, emails, addresses, etc.). Features - Admin can create unlimited number of settings - Settings can be grouped - Admin can set setting label, notes, property name, field width and type - Settings can be of type text, checkbox, radios, select, email, url, integer How to use In module configuration create as many settings as needed. Customize their label, type, width and provide a name you want to use in a template files (property name). After that admin can set those settings on "General Settings" page in "Setup" section. Every time you wish to output eg. site name you can use $settings->site_name or wire('settings')->site_name or $settings->option2 to get value of 'Check it' as seen on the first screenshot. (Checked checkbox returns 1). You can change global name ($settings) to something else in module configuration. To get basic markup with all settings and their values use $settings->render(), usefull to check returning values (esp. select/radios - their values are sanitized as page names). Current limitation: -no way to change order of settings, -new settings can only be added at the bottom. Multilanguage To make fields multilanguage aware create a field with a same property name with '_languageName' appended. Example: Your site has two languages: default and french, create site_title and site_title_french fields. Put in a template $settings->site_title. If a user has set french language, this module output site_title_french, otherwise site_title. Please notice that render() function is not language aware. https://github.com/pmarki/ProcessGeneralSettings
    1 point
  14. Hi guys! I'm really happy to finally showcase this website in the forum. It's the website of a Porto based Digital Animation Studio. A bunch of talented folks, really. This is a heavily animated/scripted/ajaxed website, that makes use of CSS animations, transitions, transforms, HTML5 audio API, and so on and so on. I spent actually more time debugging than constructing it. Unfortunately, we didn't manage to kill all the bugs before the launching, so you might experience some along the way. We even had to give up on Safari (Damn buggy piece of software !!), and advice the user to use another modern browser. But we think it's still well worth it This is also the first website we developed but didn't design. The design is from the excellent The Royal Studio, from Porto. You might know some of their illustration work for the Adobe online tutorials. --- Enough talk, here is the link http://www.aimcreativestudios.com/ (No safari, please, you'll regret it) Hope you guys like it!
    1 point
  15. Definitely! Thank you. I think it also helped a lot in being able to more easily find the panel one needs to spot, the alphabetical order might be the one to keep, and probably there is no need for "arbitrary" grouping (at least I was not able to suggest groups, because of the diversity of the functions the panels represent).
    1 point
  16. Is this better? That's how it looks in the latest version.
    1 point
  17. Not filled date fields are sorted as 0 therefore you cannot "fallback" to another field's date. Secondary sorting is only used to determine sorting for pages, which have an equal sorting value by the first field. It's like sorting items which are already put inside a folder from a previous sort. The same goes for the >=today. NULL is not greater than the current timestamp, so the selector shouldn't return pages without end date. Use "end=(end_date=''), end=(end_date>=today)" instead.
    1 point
  18. http://lmgtfy.com/?q=processwire+how+to+hide+the+pagetree+and+pages+tab%3F
    1 point
  19. @tpr - columns for the panel selector does sound like a decent idea. The Tracy core CSS is a bit of a pain - I already have to make one core hack because of the way they have things set up. I am actually using all: initial in one place already, but not everywhere. Maybe I'll revisit using it more. That's always been my thought too, but when I see what you have done with AOS I second guess that decision
    1 point
  20. Thanks for your thoughts as usual. I keep for forgetting about your screen real estate limitations. My laptop is 1680 x 1050 and my last one was actually 1920 x 1080 (from 2003) so I forget that people have smaller resolution to work with. I thought I took care of this recently - are you still seeing this problem? There are lots of things that I need to override but it takes time to come across them all. Please let me know whenever you find a CSS attribute that I have missed. What would the logical groupings be? I just made them in alphabetical order which I thought would be simplest. I agree that the admin settings could be improved. I'll admit I don't have @tpr's flare for that though
    1 point
  21. You could set up an array which maps your custom ordering and then loop over it and get/put your data accordingly ... !? $my_custom_order_map = array( 1 => 3, 2 => 2, 3 => 1, 4 => 4, … ); $new_order = new PageArray(); foreach($my_custom_order_map as $pos) { $new_order->append($old_page_array->eq($pos)); } best wishes, Steffen
    1 point
  22. Thanks again Adrian! One issue with the Panel selector: we have "too many panels" On one hand this is awesome, on the other hand we are running out of space: And this is with a set of css rules that do not override the small line height + small font size. I also used "css frameworks" which blew it up and it took a lot more space than this. Since you added "Disable Tracy" to the bottom, we've lost valuable space. It's ok if you do not want to hack the System Info panel, I "had the feeling" it might not be supported to add anything to it, so that is out of the question. However, this panel should be laid out in a horizontal manner as much us possible, so that to make room for the other panels you are going to add in the near future Jokes aside, you might want to logically group panels in the list (you know I'm talking about @tpr's AOS-settings-like groupping) so that they can be found more easily. And this is true for the admin's setting, where a similar groupping can help too (we've already touched this topic).
    1 point
  23. For php 5.6+ by using this: use function ProcessWire\wire; Or maybe a own function wire() for your namespace, which then delegates to processwire's function: function wire($key, …) { return \ProcessWire\wire($key, …); } And just to make that clear. Bootstrapping processwire will make api variables available as local variables, no need for wire() func calls here. Just use $config.
    1 point
  24. I normally start the day with some classical music, then progress into something else when the classical music sets me up nicely for the rest of the day. I recommend Idagio (https://www.idagio.com/) where it allows you to configure your music to your moods or other parameters. Whilst it's not quite music, but for those looking for something less "intrusive" can try Noisli (https://www.noisli.com) for some allegedly productive background noise.
    1 point
  25. Yes, but what is the problem with that? If it's a matter of not wanting the client name in the URL then these could be altered using Ryan's method from the CMS Critic case study.
    1 point
  26. @Robin S no this module only works if estates are as childpages under every client! If you have all estates under one parent and separate with a pagefield this would not work... So if you grasp the concept it is a very ambitiously to get a real "client" based application running...;) I will provide you again some links and advice - but i've to say that is is very important not only grasp the concept if you wanna build a working solution...there are many estate applications out there since this is a $$ business I provide very often on more complex sites a simple stripped down admin page for special users...with AdminCustomPages module. With Processwire there is no module that does the heavy lifting for you, but PW IS the tool that makes heavy stuff beeing fun.....this is the basic concept of PW. No "ready to use" solution but a "ready to build" Workbench! If you have deeper problems on this topic you can PM me or you can use this board, too: https://processwire.com/talk/forum/22-jobs/ best regards mr-fan
    1 point
  27. While by at this, the Lightwire skin will also an option for this submodule. I will apply some default CKE configuration for plugins but if the user uses a custom config.js then these defaults will be overwritten. This submodule is going to be a great timesaver for me, at least
    1 point
  28. One or more of these fields in your selector must be Page fields. If you are trying to match the title of the selected page(s) in your search then use a subfield selector for the page title. For example, instead of... $selector = "my_page_field~=$q"; ...do... $selector = "my_page_field.title~=$q"; I suspect that otherwise PW thinks that you might be trying to match the page ID to the number in your search query, which doesn't allow a ~= operator.
    1 point
  29. As discussed on Github, AOS will probably have a submodule that will load CKEditor plugins automatically, so you don't have to manually configure each field. I use the following plugins by default: autogrow keystrokes justify Let me know if you have such "basic" plugins you would like to see here. Obviously complex plugins that need more configuration will be not included here. Plus I don't know whether AOS should mess with CKE toolbar buttons, or leave it to the user to enter buttons to the field's settings in the admin.
    1 point
  30. That is absolutely right, and we are very happy to do so! We plan to do all future web projects with ProcessWire. The concept is just unbeatable.
    1 point
  31. Sorry, forgot to state that I had re-built the site using it's own domain. It's no longer subject to the multiple copies of PW issues. It's something specific to this site and I think I'm starting to track down the issue. There's a broken image in one of the CKeditor fields and it's causing the logout. I'm going to manually remove the image using phpMyAdmin and see what happens... UPDATE: FIXED! For some reason, if there's a broken (ie: missing) image in a rich text editor field it causes logouts. I haven't tried reproducing this yet from a clean install, but something funny happens when there's an image that's referenced in a rich editor field and it gets removed.
    1 point
  32. I decided to add a dedicated "Tracy Toggler" panel. Well it's actually just a button - you can see it second from the end: and when it's disabled, this is all you see at the bottom right of your site: I left the "Disable Tracy" button in the Panel Selector because I figured some users may prefer that approach - it's your choice.
    1 point
  33. Ok sorry, so lets get started with a step-by-step coding moment. I based the work on your form I found there : http://pingu.eb-zuerich.ch/kurs/bildungsgang28/beglinger/cms/#shop What we are going to do : installing a module in order to get working with Google ReCaptcha Setting a variable which contain the site owner's address email. What the code do : check that GoogleRecaptcha is correct check the client's submitted data for security reasons show the form on the page show a message to the client only if captcha and submitted data are correct send email to the site owner and send email to the client's email You can copy the code, it should work fine. But I advice you to try to read it understand so we will go with more PW API next time Anyway, the following code is taken from here (a topic that is worth to read) and modified for your needs, more infos on the end of the post. 1) Install the module MarkupGoogleRecaptcha and configure it : Now the code : <?php $emailTo = ''; // address mail of the site owner (you can get this value from a field!) $emailBackMessage = 'Thanks you for your purshase.'; $captchamod = $modules->get("MarkupGoogleRecaptcha"); // get the module for GoogleReCapatcha $captcha_form = $captchamod->render(); // render Google ReCaptcha for including it in our form $sent = false; // check for error $error = ''; // error message $out = ''; // this variable will contain our HTML markup // sanitize form values or create empty $form = array( 'product' => $sanitizer->text($input->post->product), 'fullname' => $sanitizer->text($input->post->fullname), 'address' => $sanitizer->text($input->post->address), 'email' => $sanitizer->email($input->post->email), 'telephone' => $sanitizer->text($input->post->telephone) ); // check if the form was submitted and if ReCaptcha was check if($input->post->submit && isset($_POST['g-recaptcha-response'])) { if (!$captchamod->verifyResponse()) { $error = "<p class='error'>Please check the Google ReCapctha.</p>"; } // determine if any fields were ommitted or didn't validate foreach($form as $key => $value) { if(empty($value)) $error = "<p class='error'>Please check that you have completed all fields.</p>"; } // if no errors, email the form results if(!$error) { $message = "Full name: {$form['fullname']}\n" . "Email: {$form['email']}\n" . "Address: {$form['address']}\n" . "Tel: {$form['telephone']}\n" . "Product: {$form['product']}"; // send mail to the site owner mail($emailTo, "Contact Form", $message, "From: {$form['email']}"); // send mail to the client mail($form['email'], "Contact Form", $emailBackMessage, "From: {$emailTo}"); // populate body with success message, or pull it from another PW field $out = "<div class='alert alert-success'>Thank you, your message and your item has been recorded. An email confirmation as been sent to your inbox.</div>"; $sent = true; } } if(!$sent): // if the message was not sent successfully // the form markup $out = <<<HTML <div class="alert alert-warning">{$error}</div> <form role="form" id="frmContact" method="post" action="./"> <div class="form-group"> <label for="product">Article:</label> <select class="form-control" name="product" id="product"> <option>T-Shirt: white, slim</option> <option>Jacket: leather, black</option> <option>T-Shirt: grey, logo-print (reserved)</option> <option>T-Shirt: green, bus-print</option> </select> </div> <div class="form-group"> <label for="fullname">Name:</label> <input type="text" class="form-control" name="fullname" id="fullname" required> </div> <div class="form-group"> <label for="address">Address:</label> <input type="text" class="form-control" name="address" id="address" required> </div> <div class="form-group"> <label for="email">Email:</label> <input type="email" class="form-control" name="email" id="email" required> </div> <div class="form-group"> <label for="telephone">Telephone:</label> <input type="tel" class="form-control" name="telephone" id="telephone" required> </div> {$captcha_form} <button type="submit" class="btn btn-warning" name="submit" id="submitBtn" value="submit">Buy</button> </form> HTML; endif; // end if | email not !sent echo $out; // echo the markup ?> The code is well commented and self explanatory. 2) Set the email of the site owner. In the code : $emailTo = ''; // address mail of the site owner (you can get this value from a field!) Now you should be able to copy-pasta the code in place of the form in your page
    1 point
  34. Hello and thanks for your answers. @szabesz - My problem started with playing with the multi-language-support of PW. Now I disabled it completely because I dont need it. As a result I have to fill some fields again. And no, I did not have a backup, but I will add one in future. However I'm not sure if a copy of the 'site'-folders had saved me. And as long as my hosting package allows only one database, I'm not able to save a copy of it. @adrian - My problem had nothing to do with that image-extra-field, but this was the first field I noticed the issue. Anyway, thank you both for your help to find the right way, Günter
    1 point
  35. The whole text of that page should be "see footer"
    1 point
  36. Hi, Probably the simplest way to do this is to implement a simple import script, such as this one: Yeah, I know it's XML, but CSV should be simple too, eg: http://stackoverflow.com/questions/9139202/how-to-parse-a-csv-file-using-php Hope this helps.
    1 point
  37. Never mind. Figured it out seconds after posting that. As you were.
    1 point
  38. This looks great @horst - just one initial request - can we lose the "Wow that looks great" button label and make it simply "Continue" or "Accept" or something similar. And maybe the "Not happy, crop again" link should be a button with "Redo Crop" ? PS I know these labels are a legacy of the original thumbnails module, but they do sound a little weird to me.
    1 point
  39. Although you were experiencing this issue before enabling xdebug, xdebug itself really slows down PW. But that doesn't seem to be the issue in your case. Some things to try: try running the site on a production server and see if it's slow. if it's not, there's some issue with your local server. if you're using an old version of wamp-server (like v 2.4), try upgrading to a newer version. i hit an issue a couple years ago on an older version that was plaguing me. perhaps you're doing some crazy stuff with your code that you may not realize. keep trying to selectively remove various parts of your code and refreshing your site to see if you get a moment where everything clears up. then analyze the problematic code. Let us know how it works out.
    1 point
  40. @RyanJ Can you elaborate a bit more on how they manage database changes you're doing on those dev environments?
    1 point
  41. I'll spend a little snippet to render a nice admin table in such kinds of dashboard.... //lets's show some last events //rootpage of articles is XXXX // Find some pages $events = $pages->find("template=event,check_active=0,limit=5,sort=event_start_date,sort=event_start_time"); $table = $modules->get("MarkupAdminDataTable"); $table->headerRow( ["Title", "Created", "User"] ); $table->setSortable(false); $table->action(array( 'New Event' => $config->urls->admin . 'page/add/?parent_id=XXXX', 'All Events' => $config->urls->admin . 'page/events/', )); foreach($events as $page){ $data = array( // Values with a sting key are converter to a link: title => link $page->title => $config->urls->admin."page/edit/?id=".$page->id, date("F j, Y", $page->created), $page->createdUser->full_name ); $table->row($data); } // $table->footerRow( $someArray ); echo '<div class="someclass">'; ">'; echo $table->render(); echo '</div>'; renders something like this: have fun
    1 point
  42. This is a very good newsletter I think https://serversforhackers.com/
    1 point
  43. You could use the config options for page secure files... $config->pagefileSecure = true; $config->pagefileSecurePathPrefix = '-'; and make unpublished pages and their files will not be accessible via url. So you could create child pages under the users page with a file field, and leave those pages unpublished. The assets directory will be prefixed with "-" which is restricted by htaccess. But then you can use a passthru script to send the file to the user if certain requirements are given using wireSendFile(); So for example construct the download link to the file like this on a page the user can see. <a href="/download.php?user=1007&file=filename.pdf">Download file</a> and in download.php with something like this for the passthru and user check // bootstrap PW include("./index.php"); // make sure user is logged in if(wire("user")->isLoggedin()){ $file = $_GET['file']; $userid = $_GET['user']; $userpage = wire("pages")->get(wire("user")->id); if($userpage->id != $userid) die("no access"); // make sure it's the user if($filepage = $userpage->child("include=all")){ // since page is unpublished we add include all // get the file from the page $filename = $filepage->images->get($file)->filename; if(!$filename) die("download not found"); // send file to browser wireSendFile($filename, array('exit' => true)); } else { die("no user page found"); } } else { wire("session")->redirect("/somepage/"); }
    1 point
  44. Great solution, thanks for posting this Pete. I figure I should follow-up and post the route that I use too, though this one depends on the server running unix. It creates rotating backups off your non-web-accessible home directory with a cron job, and then a cron job on your machine (or another server) copies the backups over every day. 1. Login to your unix-based web account (SSH or FTPS/SFTP) and create a directory off your non-web-accessible home directory where the backups will be stored. I call mine /db-backups/: mkdir /home/your-account/db-backups 2. Create a file in your home directory called .my.cnf (starting with a period). This holds your DB connection information. Place the following into that file, replacing "mysql_username" with your database username, and "mysql_password" with your database password: /home/your-account/.my.cnf [client] user=mysql_username pass=mysql_password If working on a shared server or some environment where other accounts can get into your files, make sure that .my.cnf file isn't readable by anyone else. i.e. type "chmod og-rwx .my.cnf" to remove (o)ther and (g)roup read/write/execute access to it. 3. Create another file in your non-web-accessible home directory called db-backup and paste the following in there. Update the first two lines in the script to point to the directory you created in step 1 (DB_BACKUP) and the name of the database you want to backup (DB_NAME). /home/your-account/db-backup #!/bin/bash # modify the following to suit your environment DB_BACKUP="/home/your-account/db-backups" DB_NAME="your-db-name" # title and version echo "" echo $DB_NAME echo "----------------------" echo "* Rotating backups..." rm $DB_BACKUP/$DB_NAME.5.sql mv $DB_BACKUP/$DB_NAME.4.sql $DB_BACKUP/$DB_NAME.5.sql mv $DB_BACKUP/$DB_NAME.3.sql $DB_BACKUP/$DB_NAME.4.sql mv $DB_BACKUP/$DB_NAME.2.sql $DB_BACKUP/$DB_NAME.3.sql mv $DB_BACKUP/$DB_NAME.1.sql $DB_BACKUP/$DB_NAME.2.sql echo "* Creating new backup..." mysqldump $DB_NAME > $DB_BACKUP/$DB_NAME.1.sql echo "----------------------" echo "Done" Note: I found this code somewhere else online a couple years ago and don't remember where to properly credit it. 4. Save the above and make it executable: chmod u+x db-backup If you are connected via SSH, test it out to make sure it's working by typing: ./db-backup It should create the first backup in your ./db-backups/ directory. 5. Setup a daily cron job to execute that file: /home/your-account/db-backup … most web hosting accounts have some ability to setup cron jobs in the control panel. 6. Now your server is keeping rotating backups in your account. Next I'd recommend going further and copying them to another machine, automatically every day. How you do this depends on whether you are going to use SFTP/FTPS or SSH (with rsync). Its preferable not to use regular FTP since it's not secure. In my case, I've setup a cron job on my OS X desktop to copy over the files to my computer every day. It executes a file that looks like this: #!/bin/bash /usr/bin/rsync --archive --rsh=/usr/bin/ssh --verbose user@domain.com:db-backups/* /Users/ryan/Backups/db/ That copies those rotating backups to a /Users/ryan/Backups/db/ directory on my computer. In order for the above to work, you'd have to already be using SSH with your account and have your SSH keys assigned so that you can connect without typing your login/password. If anyone is running a similar setup, I'll be glad to tell you how to do that. But I know there are other ways to automate this task and the approach you use here kind of depends on the platform and whether you have SSH access on the server. This setup is pretty bulletproof, but I'd like to have some module in PW in the future that will let it do all of this for you – Automatic backups from one server to another.
    1 point
×
×
  • Create New...