Tom. Posted January 13, 2017 Share Posted January 13, 2017 Hey, I'm wanting to build a selector where you can filter the day (Friday, Saturday, Sunday). However, it doesn't matter the date as long as it falls on a Friday, Saturday or Sunday. $pages->find("template=act, showing_on=Friday"); I'm using a dateTime field because it will show the actual date, the only thing I can think of is have a date select and a options field to select the day. I was just wondering if there is a better way of doing it avoiding the user selecting twice. Before I was looping through each act and converting the dateTime to day and checking if it doesn't equal the day !="Friday" and removing it from the array if it doesn't. However this crashes the server when traffic is high. Link to comment Share on other sites More sharing options...
BitPoet Posted January 13, 2017 Share Posted January 13, 2017 You could try my DatetimeAdvanced field type and filter by showing_on.day_of_week. 3 Link to comment Share on other sites More sharing options...
Tom. Posted January 13, 2017 Author Share Posted January 13, 2017 11 minutes ago, BitPoet said: You could try my DatetimeAdvanced field type and filter by showing_on.day_of_week. Exactly what I'm looking for, thank you very much! Edit: @BitPoet Not working with 3.0 - Error: Class 'ProcessWire\WireDT' not found (line 109 of /home/peterand/public_html/pwtramlines/site/modules/WireDT/FieldtypeDatetimeAdvanced.module) Link to comment Share on other sites More sharing options...
fbg13 Posted January 13, 2017 Share Posted January 13, 2017 @Tom. is because of the namespace, adding a backslash (\) before WireDT should fix it. http://stackoverflow.com/questions/8610729/cannot-find-class-with-php-namespace Link to comment Share on other sites More sharing options...
Tom. Posted January 13, 2017 Author Share Posted January 13, 2017 9 minutes ago, fbg13 said: @Tom. is because of the namespace, adding a backslash (\) before WireDT should fix it. http://stackoverflow.com/questions/8610729/cannot-find-class-with-php-namespace HI fbg13, I have already namespaced it, thank you for your reply. I was making BitPoet aware. I opted to namespace the entire php file. 2 Link to comment Share on other sites More sharing options...
BitPoet Posted January 13, 2017 Share Posted January 13, 2017 Thanks for the feedback. I hadn't tried it with 3.x yet. Since WireDT is a PW module anyway, I'm going to switch to using PW's $modules/Module API instead of "new" and "instanceof". 1 Link to comment Share on other sites More sharing options...
Tom. Posted January 13, 2017 Author Share Posted January 13, 2017 2 hours ago, BitPoet said: Thanks for the feedback. I hadn't tried it with 3.x yet. Since WireDT is a PW module anyway, I'm going to switch to using PW's $modules/Module API instead of "new" and "instanceof". @BitPoet sadly this has broken the website. All date format fields when using the time field also get the following error - All the data has reset to 1970. It also breaks the ability to do $pages->find("timeon<=". time() ."); Error saving field "timeon" - SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '' for column 'data' at row 1 Link to comment Share on other sites More sharing options...
BitPoet Posted January 14, 2017 Share Posted January 14, 2017 Sorry, it's apparently been too long since I tested the module with newer PW versions (turned out I was using an early 3.x release, but too much has changed since then), but I'm working on it. It's giving me a bit of a headache still, but I'll try to have it fixed over the weekend. 2 Link to comment Share on other sites More sharing options...
Robin S Posted January 14, 2017 Share Posted January 14, 2017 @Tom., I think BitPoet's module is the way to go, but in case you can't use it (e.g. your MySQL doesn't have timezone support enabled) you could use a saveReady hook to populate a hidden field with the day of the week of the entered date. // in /site/ready.php $this->pages->addHookAfter('saveReady', function($event) { $page = $event->arguments('page'); if($page->template->name === 'act' && $page->date_field) { $page->day_of_week = date('l', $page->date_field); } }); // find pages $pages->find("template=act, day_of_week=Friday"); 1 Link to comment Share on other sites More sharing options...
BitPoet Posted January 14, 2017 Share Posted January 14, 2017 Actually, @Robin S' approach isn't a bad one either. I've just pushed 0.0.8 to GitHub that overrides some native methods of FieldtypeDatetime and adds InputfieldDatetimeAdvanced to work around some explicit integer casts by the core WireDatetime class. I haven't been able to test it extensively yet, of course, but it does look like everything works on 3.0.34 (high time to upgrade my 3.x test system now). I'm not completely sure if the module upgrade will run smoothly. In the worst case, switch the field back to a regular Datetime field, uninstall the module and WireDT, then re-install the Fieldtype module. 1 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now