Jump to content

bernhard

Members
  • Posts

    6,659
  • Joined

  • Last visited

  • Days Won

    366

Everything posted by bernhard

  1. Please update to v3.4.1 which updates dependencies because of this security issue with symfony/process:
  2. The problem with wire()->modules->refresh() is that it might trigger another migration which could cause an endless loop. That's why there is rockmigrations()->refresh() which sets the "noMigrate" flag before doing the modules::refresh and then resets the flag after it is done.
  3. Hey @gebeer thx for your question. Interesting that I did not experience this issue... But I have added a check that should reset the cache if the path changes. Please try v1.3.0 https://www.baumrock.com/releases/rockicons/
  4. Well we all do try/error and that's a valid workflow for most situations but not for describing problems or asking for help. Your problem description so far for me is like: Please provide step by step instructions what you did. Often this already leads to an AHA moment and shows you the solution or what went wrong.
  5. @olivetree you have to be more specific with your questions and with your descriptions otherwise I can't help you. I don't know what "worked" means. Did you get output? Did you get no errors... What did you do? Where did you put the echo statement... I have no idea what that means. I don't understand, sorry. That's definitely not necessary and it is definitely not complicated or tricky. This is a problem with the module directory. It does not grab the version number automatically and I'd have to update every single module for every single update that I push, which is not an option. I'll ask Ryan for a fix, thx.
  6. Great. Please change the topic to [solved] if you find time, thx 🙂
  7. Or something like this? (untested, never used) <If "%{HTTP_HOST} == 'foo.ddev.site'"> Options +FollowSymLinks </If> <Else> Options +SymLinksifOwnerMatch </Else>
  8. Both directives are needed if you have symlinks in your setup, which will be the case if you use RockMigrations deployments for example. If you don't have any symlinks I guess you could remove them, but I'm not sure if anything else needs them. I don't have any problems with DDEV.
  9. Hey @olivetree thank you for your question. ProcessWire is totally open to how you structure your frontend or where you put which kind of markup, that's why the short answer would be "wherever you want". The RockFrontend site profile loads the _main.latte file for every request. Before that, it loads the template specific file, eg home.php or basic-page.php So for example you could place your code snippet in _main.latte, then all blocks would be rendered on every page. If you only want to render rockpagebuilder for basic-page pages, then you could add this: {if $page->template == 'basic-page'} {$rockpagebuilder->render()} {/if} Does that help?
  10. Are you wondering about how this module is different to ListerPro? Have a look at this thread:
  11. Hey @olivetree thank you for your question. I think in terms of use cases you can do quite the same with both modules. (See note at the end) The main difference between both modules is how/where data is handled. ListerPro handles all data on the server side, which means there is basically no limit in terms of scale. Pagination etc. is all done by the backend (php) and only small chunks of the data are sent to the client. With RockGrid, on the other hand, all the data is sent to the client at once and that data is then handled by the client. That has the drawback that you might hit limits earlier than with ListerPro, but it has the benefit that sorting and filtering is done on the client and produces instant results. There is no need for any ajax requests, no waiting for receiving the data, etc.; Another benefit of using RockGrid is that you have unlimited possibilities in HOW you present your data. The downside is that you need to define all that with a mix of PHP (the data selection, basically just a PW selector) and JS (the visual part). With ListerPro you can build your data listings via GUI with just a few clicks. That means that you are very limited in terms of visually presenting data. In terms of scalability RockGrid should be fine quite far, though. Users reported good results with grids having 75 columns and up to 150.000 rows! That's a lot. It always depends on the device though, but I've never had tables with 75 columns and less columns means more rows possible. If you have a look at the demo image of RockGrid: How would you build that with ListerPro? BUT: ListerPro will show page actions by default and you will not have to do anything. With RockGrid every piece of the representation comes from code, so if you need page actions you need to add code to do so (there are helper functions there, but it's more work than with ListerPro). Oh, I almost forgot 🙂 You can use RockGrid as an Inputfield as well! For the RockCommerce module I'm using RockGrid to select the variations of a product. You can filter by variation name, then select all options of the variation by clicking the variation column, then deselect single items that you don't need by clicking on the option column: So RockGrid can not only be used for similar use cases like ListerPro but also for use cases that you have used page reference fields in the past. 😎 I'll have to write better docs and make a video about it, but I wanted/needed to release it as it is a dependency for RockCommerce and for that module you don't need to create any grids on your own, you just install the module and use it. That's why for RockCommerce the RockGrid docs are not a necessity. It's a really powerful module and it has gone a long way. 🙂 Does that answer your question? PS: Oh and here is an example how you can use it for more complex input scenarios, like adding prices and doing calculations on the fly: That's also very different to what ListerPro offers 🙂
  12. Nothing yet. We are still not at the stage where we really need that feature 🙂
  13. Ok thx. The reason why it ends up in main.css is actually 50% because of RockPageBuilder and 50% because of RockFrontend. RockPageBuilder adds something like this: rockfrontend()->styles()->addAll('/path/to/all/blocks'); This will tell RockFrontend to add all .less files to the main css file. You can tell it to rename this file, have a look here: https://www.baumrock.com/en/processwire/modules/rockfrontend/docs/asset-tools/ That means using the SCSS module it should also be possible to use ->addAll() and just place all .scss files in the block folders and let the module compile it to one file. Do you understand what I'm trying to say? 😅
  14. RockForms v2.1.0 Breaking Change: RockForms was refactored to use RockLoaders for loading animations. If you have not used any loading animations in your project you should be safe to just upgrade without issues. If you have any problems let me know in the forum! Added getData() method to improve API usage for multi-step-forms
  15. RockPageBuilder v5.9.1 Added a config setting to prevent loading the frontend styles file as requested by nurkka here Added block type to the API for filtering/finding as requested by gebeer here and updated docs Added new block icons thx to FireWire's post here. Thank you! 🚀 Improved docs about sort/groupSort
  16. RockShell v3.4.0 Added PR #16 from lemachinarbo that improves host checking to support different ports and DDEV env variables; Thank you! 🚀 Added module:create command Added module:install command
  17. RockMigrations v5.5.0 Added PR #65 from lemachinarbo that improves the moduleInstall command; Thank you! 🚀 Added support for config migrations: See docs This update is extremely helpful and from now on the recommended way to write migrations, as this workflow makes circular references a problem of the past! 🥳💪 Added docs about automated releases
  18. RockFrontend v3.23.2 PW functions like wire() or modules() are now available in latte files 😍 That also means that translations via __(...) now work natively! Several fixes and improvements for the AJAX Endpoints feature Improvements to the quite new field() method Improved consent tools
  19. Maybe I mixed something up in my head?! I thought this was solving your problem. If not, could you please describe the problem again and with more details. Steps to reproduce, etc. Thx!
  20. This powerful module has been under ongoing development for several years. The history dates back to the year 2016 🤯 Back then it was built on top of https://datatables.net/. Later I switched to https://www.ag-grid.com/ and finally settled with https://tabulator.info/ to do the heavy lifting. With RockGrid you can display any kind of tabular data on the ProcessWire backend. It helps you structure your code in a way to keep it maintainable and it comes with a lot of helpers that customise tabulator to the needs of ProcessWire. Download & Docs: baumrock.com/RockGrid
  21. Hey @gebeer would be nice to mark this topic [solved] thx 🙂
  22. Hey @nurkka I've added a setting for you some time ago and think I forgot to mention that 🙂 Please check out v5.9.1 and mark this [solved]
  23. Congrats to all of you 💪 Great to see you had a good time 🙂
  24. I also like the "cowboy coding" term, but I want to add that VSCode remote can not only be used for cowboy coding but also for - I don't know how to say - regular tasks! I'm using it on a regular basis to do different things on my servers that I manage. It's great, for example, for editing files that are not part of the automated deployment - eg /site/config-local.php Browsing files, moving folders, searching for keywords in the codebase, temporarily adding something to the codebase, etc.; All of that is extremely comfortable to do with VSCode compared to doing it on the command line. So it's definitely a tool that is worth to have and worth to know!
  25. Hey @zoeck thx that helped a lot. I hacked together an example for you that shows how you can use AlpineJS for that: public function buildForm() { $form = $this; $form->setRockFormsRenderer('UIkit'); $form->setHtmlAttribute('x-data', '{ lines: 2, init() { // update lineData when lines input changes this.$watch("lines", this.lineData.bind(this)); // monitor inputs and update textarea document.addEventListener("input", this.updateTextarea.bind(this)); }, // return an array that we can use for x-for lineData() { return Array.from({length: this.lines}); }, // update textarea when inputs change updateTextarea(e) { // find all .linedata elements const els = document.querySelectorAll(".linedata"); // get their values const values = Array.from(els).map(el => el.value); // join them with newlines const text = values.join("\n"); // set the textarea value to that document.querySelector("textarea").value = text; }, }'); $form->addInteger('lines') ->setHtmlAttribute('x-model', 'lines'); $form->addTextArea('times') ->setHtmlAttribute('rows', '10'); $form->addMarkup('<template x-for="line in lineData"> <div><!-- must have one single root element --> <input type="text" class="linedata uk-input"> </div> </template>'); } The idea is to create a textarea (that would be hidden) that holds the data and to build the UI based on another input via AlpineJS x-for directive:
×
×
  • Create New...