Jump to content


  • Posts

  • Joined

  • Last visited

Everything posted by sz-ligatur

  1. Hello @adrian & @Fuzen – I have tried this without success. May I ask you what it needs to set up? I need a second select (field b), that offers options related to the selected value in field a. Pages structure: _dir-tpls/ > Template 1 [chunk-tpl]/ >> Option 1 [tpl-option] >> Option 2 [tpl-option] >> … > Template 2 [chunk-tpl] >> Option … On a settings page I have these two fields: field a: name: select_tpl, type: select-option-single config > parent => _dir-tpls/ config > template => chunk-tpl field b: name: tpl_options, type: checkbox-multi config > parent => '' config > template => tpl-option config > findPagesSelector => 'parent=page.select_tpl' //include=hidden It doesn't show any options in the select field b. If I leave the findPagesSelector empty, all option pages [tpl-option] are listet. You say it's a core feature, so I guess it should work without any additional JS? Or did I get you wrong? I would be happy if you could help me with a hint – thank you!
  2. Hello @Nomak, I have the same error here on my live setup, getting this error on e.g. pagelister, view a log, edit template or field – did you find a solution? SQLSTATE[42000]: Syntax error or access violation: 1104 The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET MAX_JOIN_SIZE=# if the SELECT is okay in File: .../www/agi-placementtest/wire/core/PagesPathFinder.php:356 I guess it's related to mySQL 8 – any idea what I can do to fix this? ProcessWire: 3.0.229 PHP: 8.1.22-he.0 Webserver: Apache MySQL Server: 8.0.35-27 MySQL Client: mysqlnd 8.1.22-he.0 File: .../www/agi-placementtest/wire/core/PagesPathFinder.php:356 346: $selects = implode(', ', $selects); 347: $joins = implode(" \n", $joins); 348: $wheres = implode(" AND ", $wheres); 349: $sql = "SELECT $selects \nFROM pages \n$joins \nWHERE $wheres"; 350: $query = $database->prepare($sql); 351: 352: foreach($binds as $bindKey => $bindValue) { 353: $query->bindValue(":$bindKey", $bindValue); 354: } 355: 356: $query->execute(); // <-------- error here 357: $rowCount = (int) $query->rowCount(); 358: $row = $query->fetch(\PDO::FETCH_ASSOC); 359: $query->closeCursor(); 360:
  3. Hi @adrian, your phone field just came right in time, so I gave it a try and it fits my needs well. I now want to use this fieldtype InputfieldPhone in a custom form delivered by my module. After several tries and fails I found a way, but it feels a bit odd. Is there a better/right way to use a predefined/configured field in a custom form? I guess this question is not related to your field… more a general one – but as I was stumbling across that need with the phone field I post my question here (…and because I really value your experience). // module context public function ___executeTest() { $modules = $this->wire()->modules; $fields = $this->wire()->fields; $phone = $fields->get('m_phone_2'); $p = New Page; //is that the right way to do it? $input = $phone->getInputfield($p); /** @var InputfieldForm $form */ $form = $modules->get('InputfieldForm'); $form->attr('id', 'PhoneTest'); $form->append($input); // $wrapper = new InputfieldWrapper(); // $wrapper->add($input); // $form->append($wrapper); $out = $form->render(); return $out; } Thank you! 15 minutes later – addendum: in my usecase, a new user is created on submit. In $form->process() I fetch the data and try to set the values to a new user: //$form->process() //add new user $newuser = new User(); $newuser->name = $form->getValueByName('name'); // … other fields $newuser->m_phone_2 = $form->getValueByName('m_phone_2'); // is formatted value here +49 (0)### ####### $newuser->save(); I now have to fetch the values from the raw post data: $data = $this->wire('input')->post; $newuser->m_phone_2->set('country', $data->m_phone_2_country;); $newuser->m_phone_2->set('area_code', $data->m_phone_2_area_code); … again I just wonder… is this the way to go?
  4. @Richard Jedlička & @bernhard, just want to let you know, I did a pull request for fixing issues on non label fields and on fields "not closable". https://github.com/uiii/AdminHelperLinks/pull/6#issue-1988009038
  5. Hello @ryan, I'm using a datetimefield (in a frontend form), input type is set to separate select inputs. In a multilanguage context I didn't manage to get the translated month other than english. I found that in wire/modules/Inputfield/InputfieldDatetime/types/InputfieldDatetimeSelect.php there is strftime() in use. As this is marked as deprecated for PHP 8.1 I tried to use IntlDateFormatter() like the following: $abbreviate = strpos($format, 'M') === false; // line 90 $fmt = new \IntlDateFormatter( $this->wire('languages')->getLocale(), \IntlDateFormatter::FULL, \IntlDateFormatter::FULL ); $monthFormat = $abbreviate ? 'LLL' : 'LLLL'; $fmt->setPattern($monthFormat); for($n = 1; $n <= 12; $n++) { //$monthFormat = $abbreviate ? '%b' : '%B'; //replaced //$monthLabel = $sanitizer->entities($datetime->strftime($monthFormat, mktime(0, 0, 0, $n, 1))); //replaced $monthLabel = $sanitizer->entities($fmt->format(mktime(0, 0, 0, $n, 1))); $months->addOption($n, $monthLabel); } That did it so far, it outputs the correct language variant - but: - sure, I don't want to hack core files… is there a way to replace the whole render() method of class InputfieldDatetimeSelect with a hook? - I’m not really familiar with the IntlDateFormatter(), is the usage correct here? - are you maybe willing to update the core file accordingly? Thank you!
  6. @netcarver & @dotnetic Thank you both for replying that fast. Finally I found the reason: at DSGVO times I tried to avoid cookies as much as possible, so I have the following lines in config.php to let guests without session cookie: $config->sessionAllow = function ($session) { // if there is a session cookie, chances are user is logged in if ($session->hasCookie()) return true; if (!isset($_SERVER['REQUEST_URI'])) return false; // if requested URL is an admin URL, allow session if (!empty($session->config->urls->admin) && strpos($_SERVER['REQUEST_URI'], $session->config->urls->admin) === 0) return true; // otherwise disallow session return false; }; This somehow got stuck - I disabled that part and was able to log in again. After re-enabling the cookie conditions login/out is working as usual again. Thanks for your time - I appreciate it .
  7. Hi @dotnetic, I tried to log in without any tracy debugger files (removed td-module directory and all cache files), unfortunately the error message persists. Either way, thanks for the tip, I am very grateful. My first suspicion was that something could be wrong with my PHP (session) configuration on my new machine... but I can't find any problems on similar Processwire installations. I will have to look further. ProcessWire: ProcessLogin: Diese Anfrage war anscheinend gefälscht und wurde daher abgebrochen. DEBUG MODUS ABLAUFVERFOLGUNG ($config->debug == true): #0 /Users/…www/wire/modules/Inputfield/InputfieldForm.module(238): ProcessWire\SessionCSRF->validate() #1 /Users/…www/wire/core/Wire.php(416): ProcessWire\InputfieldForm->___processInput(Object(ProcessWire\WireInputData)) #2 /Users/…www/wire/core/WireHooks.php(952): ProcessWire\Wire->_callMethod('___processInput', Array) #3 /Users/…www/wire/core/Wire.php(484): ProcessWire\WireHooks->runHooks(Object(ProcessWire\InputfieldForm), 'processInput', Array) #4 /Users/…www/wire/modules/Process/ProcessLogin/ProcessLogin.module(364): ProcessWire\Wire->__call('processInput', Array) #5 /Users/…www/wire/core/Wire.php(413): ProcessWire\ProcessLogin->___execute() #6 /Users/…www/wire/core/WireHooks.php(952): ProcessWire\Wire->_callMethod('___execute', Array) #7 /Users/…www/wire/core/Wire.php(484): ProcessWire\WireHooks->runHooks(Object(ProcessWire\ProcessLogin), 'execute', Array) #8 /Users/…www/wire/core/ProcessController.php(350): ProcessWire\Wire->__call('execute', Array) #9 /Users/…www/wire/core/Wire.php(413): ProcessWire\ProcessController->___execute() #10 /Users/…www/wire/core/WireHooks.php(952): ProcessWire\Wire->_callMethod('___execute', Array) #11 /Users/…www/wire/core/Wire.php(484): ProcessWire\WireHooks->runHooks(Object(ProcessWire\ProcessController), 'execute', Array) #12 /Users/…www/wire/core/admin.php(160): ProcessWire\Wire->__call('execute', Array) #13 /Users/…www/wire/modules/AdminTheme/AdminThemeUikit/controller.php(15): require('/Users/sz/Sites...') #14 /Users/…www/site/templates/admin.php(31): require('/Users/sz/Sites...') #15 /Users/…www/wire/core/TemplateFile.php(328): require('/Users/sz/Sites...') #16 /Users/…www/wire/core/Wire.php(413): ProcessWire\TemplateFile->___render() #17 /Users/…www/wire/core/WireHooks.php(952): ProcessWire\Wire->_callMethod('___render', Array) #18 /Users/…www/wire/core/Wire.php(484): ProcessWire\WireHooks->runHooks(Object(ProcessWire\TemplateFile), 'render', Array) #19 /Users/…www/wire/modules/PageRender.module(575): ProcessWire\Wire->__call('render', Array) #20 /Users/…www/wire/core/Wire.php(416): ProcessWire\PageRender->___renderPage(Object(ProcessWire\HookEvent)) #21 /Users/…www/wire/core/WireHooks.php(952): ProcessWire\Wire->_callMethod('___renderPage', Array) #22 /Users/…www/wire/core/Wire.php(484): ProcessWire\WireHooks->runHooks(Object(ProcessWire\PageRender), 'renderPage', Array) #23 /Users/…www/wire/core/WireHooks.php(1060): ProcessWire\Wire->__call('renderPage', Array) #24 /Users/…www/wire/core/Wire.php(484): ProcessWire\WireHooks->runHooks(Object(ProcessWire\DefaultPage), 'render', Array) #25 /Users/…www/wire/modules/Process/ProcessPageView.module(184): ProcessWire\Wire->__call('render', Array) #26 /Users/…www/wire/modules/Process/ProcessPageView.module(114): ProcessWire\ProcessPageView->renderPage(Object(ProcessWire\DefaultPage), Object(ProcessWire\PagesRequest)) #27 /Users/…www/wire/core/Wire.php(416): ProcessWire\ProcessPageView->___execute(true) #28 /Users/…www/wire/core/WireHooks.php(952): ProcessWire\Wire->_callMethod('___execute', Array) #29 /Users/…www/wire/core/Wire.php(484): ProcessWire\WireHooks->runHooks(Object(ProcessWire\ProcessPageView), 'execute', Array) #30 /Users/…www/index.php(55): ProcessWire\Wire->__call('execute', Array) #31 {main}
  8. Hello all, today I have the same problem as described above - I have a new computer with copies of all my local sites. No problem so far, until today, where I can no longer log into a particular backend, with the message as above. My attempts, I have … - @config.php $config->protectCSRF = false; - deleted the sessions table in the database - deleted files in /cache - tried without success to login with $session->forceLogin($user) = Warning: session_regenerate_id(): Session ID cannot be regenerated when there is no active session in /Users/.../wire/core/Session.php on line 1017 Does anyone have an idea where I could find the cause? I would be very grateful for helpful tips. PHP 8.0 Processwire 3.0.210 using module SessionHandlerDB
  9. I did it … #1743 - update: this is fixed in processwire 3.0.220, I can confirm that this is working now as expected.
  10. Hello @ryan, I had to change some role names on an existing site – after a while I recognized changed behavior for some role related functions. What I found is that using roles in selectors doesn't work exactly the same as I see on other fields: $s1 = "roles=aaa"; $s2 = "roles=aaa|guest"; $s3 = "roles=aaa|guest|notavailable"; echo $users->find($s1); //works, returns some users echo $users->find($s2); //works, returns some more users echo $users->find($s3); //returns empty pageArray ! As soon as I do an "OR" with a role, that does not exist, it wipes out the whole result set. Is this the intended behavior? I guess not, but maybe you can tell me where I'm wrong. Thank you!
  11. Good morning @gebeer, that looks promising – so far I didn't make the step to use the findRaw() but I will – looks like a huge potential to get my search run better. Thank you so much for your detailed examples. I will definitely dive into that and try to use it further up in my data collecting process. Btw. its about 650 documents and 430 tags. For now I just tried your 1-liner… Result: 1:4! The nested if takes avg 0.28s, your version 0.07s – now found 423 matches takes 30s instead of 120s for building the cache file (on my slow local machine). Looks like a good start for today – thank you @gebeer!
  12. Hello @Jan Romero, thank you for the clarification. Very helpful. I could add the individual items to WireCache now. As far as the resultlist is concerned, there are unfortunately still a few things going on. The list consists of several sequential finds() and there is a tag list as an isotope filter-menu*, ... so I'm leaving the MarkUpCache continue to run for now. A very special thanks for your sidenote... that explains many a… I wasn't aware of what I was doing, and yes indeed I had problems with WireCache after hijacking it. *while trying to find the bottleneck(s) with profilerPro I found one exceptional hungry candidate, but that's another topic.
  13. Hello, I'm struggling with a query in search results that slow down the rendering way too much. So much I appreciate the processwire api, I may have done stupid things with it. I have a site-search for documents (pages). After retrieving the matches, I query for the used tags at each page to render a tag-filter menu (isotope.js). In addition there is a counter on each tag label to show the usage of this tag by documents in the current result list. Thats my code… //$matches : found pages //$tags : collection of all tags used by $matches (a tag is a page) //$page->tax_tag : is page reference field at document pages, multiple select foreach ($tags as $tag) { $usage = 0; foreach ($matches as $doc) { if ($doc->tax_tag->has("id={$tag}")) $usage++; } $label = "{$tag->get('title')} {$usage}"; … } I guess that's award-worthy for producing as many unnecessary database hits as possible ... 😇 What do you think is the right way to get this data out of the database? Is anybody out there with a blazing sql-query to get all that tag-info in one hit?
  14. Hello @ryan, maybe you can give me a short hint if it is in principle not possible to have subcaches in a cache call? In the meantime I tried my luck with namespaced caches - without success - same result as described above. Thank you!
  15. Thank you @bernhard! I can reproduce this behaviour in three of my instances (all are using your awesome modules) – but they all share some boilerplate code of mine… so I won't exclude some mistake on my side. One fresh install with no custom additions nor using rf or rm has no issues so far. To my excuse, I do the first steps with your modules and custom PageClasses and latte … for me a lot of new stuff to learn – so no stone is left unturned… and maybe i messed up something. I'll keep a look at it and report back here, if I find anything causing this… hopefully not too embarrassing at the end 🤭.
  16. Hi @bernhard, thank you for replying… echo $page->test_options->title… in ready.php works as expected in _main.php it gets replaced by page title field, same in main render file latteRenderer.php or any section.latte template file a bd($page->test_options) looks good a bd($page->test_options->title) shows the page title instead a tracy console call echoes correct $page->test_options->title
  17. Hi @bernhard, I'm not 100% sure if it's correct to assign it to RockFrontend – today I found a strange one: I'm using a field FieldtypeOptions v0.0.2 with value and title as entries. It's config is radios = only single value. I'm used to call it as noted in the api example: // Ausgabe einer einzelnen Auswahl: echo '<h2>' . $page->test_options->title . '</h2>'; // Ausgabe mehrerer Auswahlen: foreach($page->test_options as $item) { echo '<li>' . $item->title . '</li>'; } Actually it's output is different in context with RockFrontend and its renderLayout() function. One has to use the ->first() call to get the title, otherwise the page-title gets rendered instead. This is the case in any template file, if it's a section.latte or main.php … same thing - please see attached screenshot. Any ideas what's going on? It's not a big thing, but it took me some time to figure it out and maybe worth fixing it with regard to compatibility. The field settings: 'test_options' => [ 'label' => 'test-options', 'flags' => 0, 'type' => 'FieldtypeOptions', 'inputfieldClass' => 'InputfieldRadios', 'optionsLang' => [ 'default' => [ 1 => 'a|ONE', 2 => 'b|TWO', 3 => 'c|THREE', ], ], ] 2023-01-12_18-28-41.pdf
  18. Hi there, I've optimized a search for items with MarkUpCache for all predefined searches (e.g. like a category) – that did work well so far using code [A] in my search template file. Today I tried to not only cache the list in its whole markup, but in addition each item in its separate cache-file. [A] and [B] On first load, it leads to an error: You must attempt to retrieve a cache first, before you can save it. (in /wire/modules/Markup/MarkupCache.module line 120) - I can see the single items cache files are generated (item-####), but the cache dir results-for-#### is empty Reloading the (search)page subsequently runs without error, but still no cache file for the list in results-for-#### Where is my mistake? I'm stuck – would be pleased about a tip. // [A] --------------- //@search tpl file.php $cache = wire("modules")->get("MarkupCache"); if (!$data = $cache->get("results-for-###", 3600)) { $data = renderResultList($foundpages); $cache->save($data); } //using $data for output echo $data; // [B] --------------- //@_func.php //render a result list of items function renderResultList($items) { $out = ''; // cycle through all the items foreach ($items as $item) { $out .= renderResultListItem($item); } return $out; } //render a single item function renderResultListItem($item) { $cache = wire("modules")->get("MarkupCache"); $cachefile = "item-{$item->id}"; if (!$data = $cache->get($cachefile, 3600)) { $data = $item->title; //…add more markup and data $cache->save($data); } return $data; }
  19. Hi Adrian, I tried to get it running – without success. I guess some things have changed in the module requirements since 2015… e.g. I tried autoload = true, but no changes. As I put a bd() in the two functions I've got no output, so they aren't called at all. It would be a great help as a startingpoint for some inheritance needs - your approach to make it work in Admin-views is quite promising. Thank you in advance. Sebastian
  20. I just recognized that all my image-field-templates with custom fields (e.g. caption, location , …) get (re)populated with the field "title" as it is set as global. How do you handle that? Just keep the field and set it to not required and hide it in edit-screens feels a bit strange. I think keep title a global field is a good idea – how do you handle this in combination with the image-field-templates? Thanks for any hints.
  21. Hello @Gadgetto, first of all my big thanks for your work on this useful module. The first steps were a pleasure, but now questions of detail arise here and there. 1) An error message concerns the function [Update order] in the backend - if fopen() is not active here, cURL is used for PUT. The following error complains about RAW Data in this context: "Raw data option with CURL not supported for PUT". phpinfo: cURL is enabled in version 7.64.0, PHP 7.4, processwire 3.0.165 I was able to work around the error by setting allow_url_fopen to on, but wonder why the error occurs when using cURL - does this need a fix? As Ryan notes [post], you can expect fopen() to be disabled more often on hosting servers in the future. 2) I'm using the "deferred payments" option and it would be helpful to be able to set the payment status in the SnipWire admin. Is there a good reason why you did not implement this feature? e.g. "Mark as paid", (or the whole set of possible values: Paid, Deferred, PaidDeferred, ChargedBack, Refunded, Paidout, Failed, Pending, Expired, Cancelled, Open, Authorized). 3) SnipCart sends the webhook order.notification.created on various events - but on SnipWire side it is ignored/not registered. So SnipCart receives a 400 and reports an error. I guess this log-message matching was not a top priority, but for the user it leads to uncertainty if the log data in SnipWire is not completely the same as in SnipCart. Especially since the "Mark as Paid" feature is not available in SnipCart - the timestamp for setting this flag is well worth logging in the notifications section for the store owner I think. I would appreciate your feedback - and of course I'm also interested in what the further plans are on your side for the module (in terms of feature extension or also support for SnipCart v3 etc.). Thanks again! Sebastian
  22. Hello Ryan, thank you for your instant reply. I'm sorry to admit that I don't fully understand the context - but I'll reach out to @Gadgetto to see how far this might mean a bug fix for snipWire. Its a function in SnipWire orders admin where I've got this error.
  23. In connection with SnipWire I had problems today with API calls that should be executed as put. The function [Update order] caused an error: "Raw data option with CURL not supported for PUT". cURL is enabled on the server in version 7.64.0, PHP 7.4 After finding the explanation below, I enabled allow_url_fopen in the php settings - so the error disappeared, everything seems to work now. I am now confused because I read this as cURL not working correctly – as it is used as a fallback in WireHttp. Is that so? Could someone with more insight enlighten me here? Should I be happy that it's working with fopen() and forget about the cURL error? Thanks!
  24. Hi dotnetic, I try to use your /processwire-language-pack-helper setup. I've got it running locally so far, but whenever I try to edit a language file I get the error: ProcessWire: ProcessLanguageTranslator: Unable to load textdomain Any ideas whats wrong? Another question regarding translations and suggestions for edits: in case of changes for existing terms – is it intended to first discuss any change here or should I make my PR in any case and it's up to you to accept or deny it? (for example I would suggest to replace "Umdrehen" with "Spiegeln" at the image action select - like its used to be called in all image-editors). Thank you!
  • Create New...