Jump to content


  • Posts

  • Joined

  • Last visited

1 Follower

Recent Profile Visitors

774 profile views

iipa's Achievements

Jr. Member

Jr. Member (3/6)



  1. Somehow I didn't consider this option at all! Thanks @dragan, I decided to implement this with cookies ? And thanks to you too @horst, I'm sure this will come handy at some point!
  2. Hello forum! I have a site, where I want to remember two settings defined by user: 1) Theme (light or dark) 2) Language (Finnish or English) Because user makes changes to these settings on client side, I am a bit lost with how can I save them in ProcessWire $session variable? I would like to use $session for more reliable saving, and since it is only two variables I will use, I doubt it will become too resource-needy. I have tried using jQuery's post() -method referring to a file in Templates folder (theme.php), but I get 403 Forbidden Error. I don't like the idea of trying to post to same file user currently is in, which is why I thought having a separate file would be good in this. Contents of theme.php: <?php namespace ProcessWire; header('Access-Control-Allow-Origin: https://domain.com'); $theme = $input->post['theme']; if(!empty($theme)) $session->theme = $theme; ?> Long story short: Does anybody have any pro tips I could use with setting and getting $session variables?
  3. Actually I came to a pretty handy solution with my co-dev! Images have information about their modification time saved within them, so using that I came up with following code: $img = $page->image; // check if image exists if($img) { // fetch cropped images' modification timestamps $tsNormal = filemtime($img->getCrop('normaali')->filename); $tsHigh = filemtime($img->getCrop('korkeampi')->filename); $tsLow = filemtime($img->getCrop('matalampi')->filename); // check if they have the same modification time => user hasn't cropped the image, so use the original if(!($tsNormal == $tsHigh && $tsNormal == $tsLow)) { // stamps are not equal => check which is highest aka last modified switch(max($tsNormal, $tsHigh, $tsLow)) { case $tsNormal: $img = $img->getCrop('normaali'); break; case $tsHigh: $img = $img->getCrop('korkeampi'); break; case $tsLow: $img = $img->getCrop('matalampi'); break; } } } Seems to work quite nicely for my purpose ?Thought it would be nice to share, if anybody else wants to achieve similar effect!
  4. Yes, there will always be default crops. Problem is that I don't need to use all of them, just one. I'll try to explain better: 1. User uploads an image. 2. If user thinks the image is good as it is, render the uncropped version. 3. If user wants to crop the image, user selects which crop setting they want to use, and then render that crop version. Problem is how can I detect which version should I use? I can't check if a version exists, since they always do.
  5. Couple of other questions though: 1. If I have multiple cropping options (normal, higher, lower height), how can I easily control which crop setting should be used? Since it does all crops when uploading the image, I can't simply check if a crop version exists. Also what if I want to use the original image instead of crop versions, how can I select that? 2. Translation file lacks a few fields from the modal: "ESC" and cropped image parameters (imgUrl, suffix, width x height, quality, sharpening). Also cropped image modal title "Save" can't be translated. Otherwise great module! ?
  6. Hi! I have an issue when I upload an image into the field. This is one of the log messages ("matalampi" is the crop setting? /../site/assets/files/1328/testiimagenodashes-1.-matalampi.0x48.jpg - Unable to copy /../site/assets/files/1328/testiimagenodashes-1.-matalampi.jpg => /../site/assets/cache/WireTempDir/.PFM0.06231100T1568804893RIbnRkmpEmZApFan/0/testiimagenodashes-1.-matalampi.0x48.jpg Same error comes from all variations. Apparently the field tries to create file variations from the image immediately after upload, but for some reason it doesn't work and a corrupted file is created. This becomes a problem when I try to check if there exists a cropped version of the image: It thinks that there is one, but since it's corrupted, image doesn't show in site. Is there a way to prevent variations being created before user actually crops the image? var_dump of image, if it helps anything ("matalampi", "korkeampi" and "normaali" are crop settings? object(ProcessWire\Pageimage)#370 (13) { ["url"]=> string(71) "/../site/assets/files/1448/img.-normaali.jpg" ["filename"]=> string(100) "/../site/assets/files/1448/img.-normaali.jpg" ["filesize"]=> bool(false) ["description"]=> string(0) "" ["tags"]=> string(0) "" ["created"]=> string(18) "17.9.2019 14:09:57" ["modified"]=> string(18) "17.9.2019 14:09:57" ["filemtime"]=> string(17) "1.1.1970 02:00:00" ["width"]=> int(0) ["height"]=> int(0) ["suffix"]=> string(0) "" ["original"]=> string(34) "img.jpg" ["variations"]=> array(5) { [0]=> string(40) "img.0x260.jpg" [1]=> string(50) "img.-matalampi.0x48.jpg" [2]=> string(50) "img.-korkeampi.0x48.jpg" [3]=> string(50) "img.-normaali.670x0.jpg" [4]=> string(49) "img.-normaali.0x48.jpg" } } "filemtime" looks kinda fishy: Does it affect anything? Edit: Aaand as soon as I decided to ask this, it seems that the issue was that my crop setting names had capital letters! So heads up for that to others as well ?
  7. Hi fellow developers! I have a basic image field on my page. I would like to force a specific aspect ratio when user wants to crop the image. Module apparently uses crop.js for cropping features, and I found some settings related to it in ProcessPageEditImageSelect.js: var cropSettings = { autoCrop: true, autoCropArea: 0.35, zoomable: false, rotatable: false, // etc ... }; I would like to change these settings, but obviously I don't want to do so straight in module code (especially because it is in wire). Question is: How can I refer to these settings somewhere safer? (For example I have admin.js where I already do some other stuff in admin pages located in site/templates/scripts)
  8. Oon some browser+OS combos that button does not work, unfortunately. I actually have debug on, since we haven't launched yet, but I'm also starting to lean into problem being in server side configurations. I managed to accomplish this in CKEditor's config.js by adding config.disallowedContent = '*{*}'; which does it automatically when pasting. It was also enough to keep server happy aswell!
  9. Well that's propably why, since I have 3.0.123! Thanks @dragan, sometimes the simplest things to check just don't come to mind ?
  10. I have a CKEditor Textarea in a page template. Some users like to add text in them by pasting from Word document. This leads to internal server error when saving page. When using paste without formatting (cmd + shift + V), page is saved normally, so I assume error has something to do with Word's hidden characters that cause issues in many other programs as well. (I don't have Word myself, so I debugged this with video chat with user. I forgot to ask to check code view, so I'm not sure if they are visible there.) Is there a way in ProcessWire/PHP to sanitize Textarea input from these hidden characters, or can I prevent this by changing editor settings (listed below, if it helps)? I don't like leaving error handling rely to user action - somebody always forgets to do things specific way and it weakens user experience. Textarea formatting: none (htmlspecialchars off) field type: CKEditor content type: markup/html experimental markup/html settings: all on acf: on html purifier: on additional purify settings: all on extra allowed content: none add-ons: pwimage, pwlink, sourcedialog sourcedialog settings: none disabled add-ons: image, magicline
  11. Hi @Robin S! I'm a bit confused with your solution. I tried to use your code, it threw me "Uncaught Error: Undefined class constant 'statusFlagged'". I looked at wire/Page.php, and it doesn't seem to have statusFlagged: static protected $statuses = array( 'locked' => self::statusLocked, 'systemID' => self::statusSystemID, 'system' => self::statusSystem, 'draft' => self::statusDraft, 'versions' => self::statusVersions, 'temp' => self::statusTemp, 'hidden' => self::statusHidden, 'unpublished' => self::statusUnpublished, 'trash' => self::statusTrash, 'deleted' => self::statusDeleted, 'systemOverride' => self::statusSystemOverride, 'corrupted' => self::statusCorrupted, ); Am I looking at the wrong place, or has it been renamed?
  12. Thanks @Edison, that was what I was asking ? Although @elabx and @dragan have good points: Composer usage might be pretty handy, and good to learn. I installed Composer, include_once() with correct path, but class cannot be found. Should I also put use [namespace]?
  13. What do you mean with "just get it from Github"? How do I refer to it from ProcessWire?
  14. Hi fellow developers! I want to implement following action: Admin-priviledged user uploads a spreadsheet file (with many sheets) When page is saved, back end generates repeater items from the sheets We can render spreadsheet data from the repeater field. Profit! Currently I'm trying to find a way to read the uploaded spreadsheet file. ProcessWire doesn't seem to have modules suitable for my needs, but external PHP Library PhpSpreadsheet sounds like it could do the job. However, I can't even try it, because I simply don't understand how I can refer to an external library! Folder structure: templates _func.php > where I want to refer to the library libraries PhpSpreadsheet bunch of *.php > what I want to refer to I have tried different things varying from their documentation to forum posts and PW API with no luck. I would prefer not to use Composer, since it seems kind of overkill for one library. Thanks in advance and have a great day!
  • Create New...