Jump to content

Juergen

Members
  • Posts

    1,424
  • Joined

  • Last visited

  • Days Won

    18

Everything posted by Juergen

  1. Hello @ all, today I am struggeling with the deletion of empty repeater items after saving in the backend. Explaination: Imagine you are adding an additional repeater item in your form in a page via the "Add button". Then you forget to fill out this item so it is empty. After submitting the form the empty repeater item is still there because you did not deleted it with the basket symbol (deletion) Goal: In theory it must be possible to create a hook that checks the repeater items for content and delete the empty items after saving. At the moment I dont know how to check if an item is empty or not. I know how to delete fields in the repeater item but not the complete item itself. Can anyone point me into the right direction? Best regards
  2. At the moment I dont use functions to create a menu out of the page tree, because you are more flexable. In most cases the menus consist of not so much items. If you use the pagetree to create the menu you are in a fixed structure. With manual writing of the menu you could change the markup, you can show only the items you want, you can easly integrate icons to each menu point,.....all without problems. So its quite worth to think over if you really need a function for your menu. Best regards
  3. Same problem here, but with image focus area fieldtype. https://processwire.com/talk/topic/8079-imagefocusarea/?p=103424 I use the latest php version. Best regards
  4. Hello, I always get the following message: Warning: strpos() expects parameter 1 to be string, array given in /home/.sites/.......web/wire/core/Pageimage.php on line 312 Just to clearify: It works as expected and I have turned on the debug mode - so I can see the message, but I dont understand what exactly could be the problem. This is the code in Pageimage.php starting with line 312 if(strpos($options['cropping'], 'x') === 0 && preg_match('/^x(\d+)[yx](\d+)/', $options['cropping'], $matches)) { $options['cropping'] = true; $options['cropExtra'] = array((int) $matches[1], (int) $matches[2], $width, $height); $crop = ''; } else { $crop = ImageSizer::croppingValueStr($options['cropping']); } Best regards
  5. Thanks LostKobrakai, now I solved it with a session id in an hidden input field that will be compared with the post value of the hidden field after submission. If session value and post value are same then send the form data and remove the session id. If someone hits the F5 button after submission, the valid session id is no more longer available (because it was removed after submission) and so the values dont match any longer. As a result a hint for "double submission" appear on the screen instead of submitting the form. The reason why I missunderstood the CSRF was a post by Soma in another topic where he uses CSRF to prevent double submissions. https://processwire.com/talk/topic/3633-prevent-form-resubmission/?p=35567 Best regards
  6. Thanks, I have misunterstood something completely, so I will redirect after $mail->send(); Best regards
  7. Hello @ all, today I have tried to implement the CSRF validation for the first time on a contact form. I have implemented the tokens to the form in a hidden field. So far so good, but the validation shows always "1" after sucessfull or failed submission. I have a custom form with Bootstrap 3 Markup and this is the code that runs after there are no errors in the form: if($session->CSRF->validate() == "1"){ //send the data and create the success message $thankyou = __("danke nachricht"); $mailsenttext = __("Nachricht erhalten"); $out = "<div class='alert alert-success' role='alert'><span class='fa fa-check fa-3x pull-left fa-border'></span><h4>$thankyou</h4><p>$mailsenttext</p><div class='clearfix'></div></div>"; //create the email $fullname = $firstname . ' ' . $lastname; $userip = $_SERVER['REMOTE_ADDR']; $mail = new PHPMailer(); $mail->IsHTML(true); $registertext = __("Mailheader Contactform"); $senderinfo = __("Absender Label"); $mail->From = $email; $mail->FromName = $fullname; $mail->AddAddress($emailTo); $mail->AddReplyTo($email, $fullname); $mail->Subject = $subject; $mail->Body .= "<p><b>$subjectlabel:</b> $subject</p><p><b>$messagelabel</b><br />$comments</p><p><b>$senderinfo</b><br />$gendername $firstname $lastname<br />$email<br />IP: $userip</p>"; $mail->send(); $form = ""; } else { //dont send data and create an error message $out = "<div class='alert alert-danger' role='alert'><span class='fa fa-warning fa-3x pull-left fa-border'></span><h4>$warning</h4><p>$doublesubmissiontext</p><div class='clearfix'></div></div>"; } Unfortunately the value of the $session->CSRF->validate() is always "1", even after successfull submission, so the form could be sent multiple times. What I am doing wrong? Best regards Jürgen
  8. Maybe this article could help you: https://processwire.com/talk/topic/3325-filter-results-via-multiple-dropdowns/?p=32779 Best regards
  9. Hello @ all As I wrote in an earlier post (https://processwire.com/talk/topic/3265-fredi-friendly-frontend-editing/?p=100192): Fredi doesnt grab or save files or images if they are inside a repeater field - can anyone confirm this behavior or ist this only in my case? If the file type field or image type field is outside the repeater field and the settings are on multiple files it is not a problem. Strange behaviour: If I call a page via a pagetable field it always grabs and saves the file/image in a repeater field Best regards.
  10. Thanks tpr! A workaround is to add a pagetable field to the template. There you can add/edit/remove children if you want and its not necessary to let the children tab be visible. Disadvantage: it opens the child in another modal (modal in modal) - but it works. Best regards
  11. @tpr Have you ever tried to edit pages in the children tab? I have tried it, but the modal window will be closed after clicking the edit link of a child page in the children tab.
  12. You are right. I have tried it with "ProcessPageEditChildren" first and it didnt work. Then I have tried "Inputfield_ProcessPageEditChildren" and were also not successfull. Now it works - why it didnt work before - I dont know. Best regards
  13. I have a problem targeting the children tab. Here is my code of the edit link: if($page->children) { if (function_exists("feel")) { echo feel($page, $editpage, "relative button invert", 0, "Inputfield_ProcessPageEditChildren", array( "enableTemplateEdit" => false, "selectorsToHide" => "", "fieldHighlightStyle" => "outline: 4px double #ddd;", "popupSettings" => array( "closeOnBgClick" => true ) ) ); } } Inputfield_ProcessPageEditChildren is the id of the children tab, but it always opens the first tab.
  14. Setting and delete tab is hidden. Is there a way to activate these tabs in the modal if necessary? Best regards SOLVED: Use the options to declare the tabs which should be hidden selectorsToHide: list of selectors to hide elements from admin (for example some tabs)
  15. SOLVED: changed the module name from MarkupSVGIcons.module to MarkupSvgIcons.module - error is gone away.
  16. I wanted to try this awesome module, but unfortunately I got this error after installation: Notice: Undefined index: MarkupSvgIcons in ..../web/wire/core/Modules.php on line 569 Notice: Undefined index: in ..../wire/core/Modules.php on line 570
  17. Thanks for your help LostKobraKai and Martijn, now the value will be added to the parent page. For all others who are interested in this, here is the complete code snippet: public function init() { $this->addHookAfter('Pages::saved', $this, 'saved'); } public function saved($event) { $page = $event->arguments[0]; if($page->template == "productpricelistitem"){ //run the hook under this condition - page which will be edited $parent = $page->parent;//get the parent page $parent->offercheck = "5"; //example value to store in the parent page in the field with the name offercheck $parent->save("offercheck"); //save the parent page } } If you use a pagetable field as in my case, dont forget to reload the parent page if you want to see the value in the field. Best regards
  18. @ LostKobraKai: you are right - the error message is gone, but it will not store any value in the field of the parent page. @ Martijn: I dont know exactly what you mean, but my goal is to add a value to a field of a parent page if the child page has a specific value in a field. I can use a hook to populate the value of a field in the page, but I am not able to do the same in the parent page.
  19. Doesnt work Warning: Attempt to assign property of non-object in /home/.sites/24/site1275/web/site/modules/HookAfterPagesSave/HookAfterPagesSave.module on line 57 Fatal error: Call to a member function save() on integer in /home/.sites/24/site1275/web/site/modules/HookAfterPagesSave/HookAfterPagesSave.module on line 58 Line 57: $parent->offercheck = "2"; //example value to store in the parent page Line 58: $parent->save("offercheck"); //save the parent page
  20. I stuck with Pages:saved. Nothing will be added and stored in the parent page. Here is the code that I call from the module: public function init() { $this->addHook('Pages::saved', $this, 'saved'); } public function saved($event) { $page = $event->arguments[0]; if($page->template == "productpricelistitem"){ //page which will be edited $parent = $page->parent_id;//grab the parent page id -> works //HERE STARTS THE PROBLEM $parent->offercheck = "2"; //example value to store in the parent page in the field "offercheck" $pages->save($parent); //save the parent page } } $parent->offercheck = "2": This line of code should add the value 2 in this case to the offercheck field of the parent page. $parent is the id of the parent page. $pages->save($parent): This line of code should save the parent page (identified by its id $parent). This 2 lines of code make troubles - Maybe its not the right syntax or way to store a value in another page.
  21. Ok that make sense. I was inspired by this topic https://processwire.com/talk/topic/2331-doing-additional-logic-after-saving-a-new-page/ So I will dive into it to solve it with Pages::saved.
  22. I use a Hook module from Soma which adds the save action: https://gist.github.com/somatonic/11206761 Sorry wrong link - I look for the right one Cant find the page but this is the code of the Hook module, where I have added all my Hook events. <?php /** * Hook the saving of pages to add own processes. * * ProcessWire 2.x * Copyright (C) 2014 by Ryan Cramer * Licensed under GNU/GPL v2, see LICENSE.TXT * * http://processwire.com * */ class HookAfterPagesSave extends WireData implements Module { public static function getModuleInfo() { return array( 'title' => 'HookAfterPageSave', 'version' => 1, 'summary' => 'Delete offer price if standard price is selected.', 'singular' => true, // Limit the module to a single instance 'autoload' => true, // Load the module with every call to ProcessWire ); } public function init() { // init() is called when the module is loaded. // saveReady is a hook after processing the previous changes of the page, // but just before those changes are saved to the database. // It's called for each page that's being saved, no matter if it's in // the backend or in your templates via the api. $this->addHookAfter('Pages::saveReady', $this, 'afterSaveReady'); } public function afterSaveReady($event) { // 1) Get the soon to be saved page object from the given event $page = $event->arguments[0]; if(($page->template == "pricelistitem") AND ($page->parents("template=products"))){ $parentid = $page->parent_id; $parentpage = $pages->get($parentid); /* if(){ $this->message("Produkt wurde auf Angebot gesetzt"); $page->parents->offercheck = "1";//this should add the value 1 to the field "offercheck" in the parent template } else { */ $page->parent->offercheck = "1";//this should add the value 0 to the field "offercheck" in the parent template //} } // delete offerprice if standard price is choosen if(($page->template == "pricelistitem") AND ($page->pricetype == "1")){ $this->message("Angebotspreis wurde entfernt"); $page->offertprice = ""; } //delete all prices if pricekind is 3 or 4 if(($page->template == "pricelistitem") AND ($page->pricelistselect >= "3")){ $this->message("Standardpreis wurde entfernt"); $this->message("Angebotspreis wurde entfernt"); $page->offertprice = ""; $page->standardprice = ""; } //delete all dates if service is unlimited in time if(($page->template == "pricelistitem") AND ($page->timelimit >= "2")){ $this->message("Startdatum wurde auf jetzt geändert"); $this->message("Enddatum wurde entfernt"); $page->publish_from = $date = date('Y-m-d H:i'); $page->publish_until = ""; } // 2) delete event texts if event is cancelled or not //clean all up if event is cancelled if(($page->template == "events") AND ($page->cancelled == "1")){ $this->message("Folgende Felder wurden geleert: Einleitungssatz, Hauptteil, Preis, Preiszusatz, Veranstaltungsortname, Downloaddateien"); $page->body = ""; $page->introtext = ""; $page->eventprice = ""; $page->eventpriceadd = ""; $page->eventcosttype = "1"; /* foreach($page->downloadrepeater as $dp){ $dp->delete($p->downloadfield); $dp->downloadfieldtitle = ""; $dp->downloadfiledesc = ""; } */ $page->singleimage->deleteAll(); $page->editorimages->deleteAll(); } if(($page->template == "events") AND ($page->cancelled != "1")){ $this->message("Der Absagetext wurde entfernt"); $page->eventcancelledreason = ""; } } }
  23. Thanks KobraKai I guess I need a Hook because I run it from a Hook module in the backend after page save. Main problem at the moment is how to add a value from this page to the parent page. F.e. $page->parent->fieldname = "1" doesnt work
  24. Hello at all, I want to use a Hook after page save of a child page to add a specific value to the parent page under a certain condition. Here is the scenario. Page structure: - productoverviewpage -product detail page - productprice page 1 - productprice page 2 - productprice page 3 and so on The product overview page includes all product pages - so its the overview of all available products. The product page itself is the detailpage for the product. Every productpage consists of different sub pages with price information, because every product has more than 1 price (depending on size and amount). Examples: Productprice page 1 has the price of 5 Euro for a small bottle. Productprice page 2 has the price of 9 Euro for a big bottle. So every productprice page consists of a specific price for the same product. On the productprice page you can choose wheater this price is an offerprice or not (simple select form field) My Goal: I need to check all the productprice pages if there is an offer available or not. If there is an offerprice in one or more productprice pages than I want to add for example the value "1" to a text field of the parent page (product detail page) via a Hook after saving the productprice page. So this is what I have tried to add the value. //selectors $productpricepageselector = $page->template == "pricelistitem";//check if page is a productprice page $offerselector = 'pricetype *= "2"';//selector if any of the children contain an offervalue (value = 2 in pricetypefield) $productdetailpageselector = "template=products";//selector of the product detail page //condition if(($productpricepageselector) AND ($page->children($offerselector)) AND($page->parents(productdetailpageselector))){ $this->message("Produkt wurde auf Angebot gesetzt"); $page->parents->offercheck = "1";//this should add the value 1 to the field "offercheck" in the parent template } But nothing happens. Maybe this condition is not true : ($page->children($offerselector)) It should be like $parent ->children($offerselector) because it should check all the other children of the product detail page. Has anyone an idea? Best regards
  25. Hello @ all, I have tried to approve a comment via clicking the link in the notification email, but nothing happens. The comment is still in pending status. Here is the approval link: http://www.my-exampledomain.at/produkte/testprodukt/?field=commentsrating&page_id=2407&code=7yOVt2mdJGTcVnJoUZwdDe9piBaNpNWi_JbqcW7NLdI4e3PxOG_D71EFFlN3hm7RDXF9mMg6YbDcYCQJWvftaoSeGsnxDCt9vdqcfzoNAPDoR4DQHexVXQZhaEYcCgkr&comment_success=approve - commentsfield name is "commentsrating" - page id is "2407" - the code is the same as in the database - the URL to the page is correct (I only changed the true domain name to "my-exampledomain" for this posting) So everything seems fine. The only thing that comes to my mind is that I use the extended version with star rating https://processwire.com/talk/topic/10829-comments-fieldtype-with-star-rating/ - so the approval link could be not correct. I have tried "&commentrating_success=approve" and "&commentRating_success=approve" at the end of the link instead of the original "&comment_success=approve" but nothing happens. What could be the cause? Best regards Jürgen
×
×
  • Create New...