kongondo

Module: Matrix Fieldtype & Inputfield

Recommended Posts

Some more thoughts on this - I wonder if maybe it's just best to turn on output formatting - that should handle getting the language for the current user.

On an unrelated note, I noticed that each entry in the matrix is a full PageArray - is this necessary? I haven't looked into/thought through this, but it seems like a lot of info to have in memory when all we need is a single value with its relevant row and column page ids. Maybe the full PageArray is needed, or maybe it doesn't matter - just thought I'd ask :)

Share this post


Link to post
Share on other sites

Hi Adrian. Glad you found a solution.

10 hours ago, adrian said:

Not sure if you want to implement just like this, or whether you think it's worth adding a more complete ML solution.

I haven't looked at this module in a while. I will have a think.

10 hours ago, adrian said:

PS - what about changing "Row Label" to the title of the parent page of the first column. In my case I have a page branch of Years to control this column. It would be much nicer if this read "Years" or "Year". Would that work, or are there more things to consider?

Ditto :).

Share this post


Link to post
Share on other sites
7 hours ago, adrian said:

On an unrelated note, I noticed that each entry in the matrix is a full PageArray - is this necessary?

That's strange. Where did you see that? The module does not return Page or PageArrays anywhere . A single entry is a Matrix object (a WireData) and groups of entries are MatrixArray objects (WireArray). Maybe I haven't looked at this in a while but I am pretty sure about this :).

Share this post


Link to post
Share on other sites

Hey @kongondo - note the Page within each Matrix item. Each one of these contains a full reference to the current page. This comes from dumping $page->matrix_field

58de67f336206_ScreenShot2017-03-31at7_29_43AM.png.3bebfb53ba4d61ab004d09a691779876.png

 

Here is the dump of $rows and $columns from the export function. You can see that each row is a full PW page object.

58de6dbbe8f1d_ScreenShot2017-03-31at7_53_28AM.png.463af2d8871a92b23da4f19b82c30be3.png

Is this expected?

Share this post


Link to post
Share on other sites

@adrian,

Aah, my bad. The culprit is where I grab the respective row and column pages in order to get the friendly rowLabel and columnLabel respectively. Would uncacheAll do the trick (to clear memory)? If not I could get titles using raw SQL...

Thanks for catching this.

Share this post


Link to post
Share on other sites

Hey @kongondo - me again :)

I have another issue for you - I recently deleted a page that was driving the matrix rows (ie in the "data" field in the DB), but it didn't remove that row from the matrix table. Maybe this in intentional to prevent potential data loss, but it seems like there is no way of removing these without a manual SQL query to delete the appropriate entries from the DB. I am away from my computer the next couple of days and don't have time to test further right now, but please let me know if you have any trouble reproducing and I'll run some more tests.

Share this post


Link to post
Share on other sites

I'm trying to keep 'scores' for users on certain pages.  So far Matrix seems to do the job, as I can type a score for every user and for different assignments. 

What I'm trying to do now is to enter scores using the API, so *not* using the admin pages. 

If I understand things right, Matrix is simular to (or an instance of?) WireArray, so I should use $matrix->add(sth)?  I just can't find my way through. 

Does anyone have an example code snippet for entering values to a Matrix using the API?  It would help me a lot. 

 

edit: Of course I can always enter the data directly into the database, but I'd rather use the power of PW if possible. 

Share this post


Link to post
Share on other sites
On 2017-4-9 at 10:41 PM, adrian said:

I have another issue for you - I recently deleted a page that was driving the matrix rows (ie in the "data" field in the DB), but it didn't remove that row from the matrix table.

Thanks Adrian, I'll have a look.

On 2017-5-16 at 9:35 AM, longtom said:

Does anyone have an example code snippet for entering values to a Matrix using the API? 

Sorry for the late reply Longtom.  Here's a code snippet:

 

Share this post


Link to post
Share on other sites

Hi all. 

I am intending to ONLY support ProcessWire 3.x starting from the next version of this module. Please have a read here and let me know what you think. Thanks.

  • Like 1

Share this post


Link to post
Share on other sites

Hello @Kongodo and thanks for this module,

I am always in a hurry, and probably that is the reason why I still can't find right solution how to use this field.
Please can somebody write short instruction how to get this on attached image using this field?

Thanks.

 

opening-time.png

Share this post


Link to post
Share on other sites
12 hours ago, OLSA said:

Please can somebody write short instruction how to get this on attached image using this field?

The very, admittedly limited, docs are here.

Your days of the week are Matrix Rows. Your Open and Close are Matrix Columns. I suggest you create a parent page for both. So A Days of the Week page whose children are the Days themselves and something similar for Open and Close. Then use method 1 or 2 as described in the docs to populate your rows and columns. Alternatively, see method 3 which allows you to use multi pagefields.

  • Like 1

Share this post


Link to post
Share on other sites

All,

I intend to give this module some love soon. As part of this, I'm considering how to allow custom names for Columns and Rows (i.e. other than pages). 

  • Like 2

Share this post


Link to post
Share on other sites

Hello @kongondo

only a question: is it possible to use a special field of a page for the field of the matrix (fe a date field, an integer field,..)?

Share this post


Link to post
Share on other sites
2 hours ago, Juergen said:

Hello @kongondo

only a question: is it possible to use a special field of a page for the field of the matrix (fe a date field, an integer field,..)?

For storage, no, for reference, yes. Matrix stores a page ID for Row, a page ID for Column and a varchar for the value of the matrix (i.e. row-column = value). Using the page IDs of Row and Column, you can use PW API to get the page and hence, any field on that page.

Maybe not what you are after but thought to clarify anyway.

  • Thanks 1

Share this post


Link to post
Share on other sites

Hello @kongondo,

I have discovered a strange behavior:

I use a pagetable field inside a parent page. If click on the link inside the pagetable to open a child page inside a modal, I will be logged out from the system if the child page has a matrix field inside.

I have traced down the problem and it has to do with a hook that I run on the pagetable field of the parent page (inside my ready.php):

$wire->addHookBefore('InputfieldPageTable::render', function($event) {
   if($this->process != 'ProcessPageEdit') return;
   $table = $event->object;
   $page = $this->process->getPage();
   // event table   
   if(in_array($table->name, ['datespagetable', 'specialbusinesshourstable', 'eventspagetable', 'businessvacationpagetable'])) {
       if(count($page->children) == 0){          
           $table->notes = "";
            $this->buttonHook = $this->addHookAfter("InputfieldButton::render", null, function(HookEvent $event){
                $event->return = __("Here all dates will be shown afterwards if some were created.");
            });
      } 
      //this part of the button hook is responsible for loggin me out if I click on the link to the page inside the pagetable 
      else {
      $this->addHookBefore("InputfieldButton::render", null, function(HookEvent $event){      
         $button = $event->object;
         if($button->name == 'button'){
          $button->attr('value', __('Add event'));
         }
      });
} 
}
}); 

Inside this hook there is another hook for rendering the "Add new" button. So this "InputfieldButton::render" hook is responsible for loggin me out (if I remove this part everthing is fine).

So its not a big problem for me (I have comment it out), but maybe you have an idea, why these lines of code could lead to this behavior in combination with the matrix field.

Best regards

 

Share this post


Link to post
Share on other sites
19 hours ago, Juergen said:

but maybe you have an idea, why these lines of code could lead to this behavior in combination with the matrix field.

I'm totally clueless about this :lol:. I'll have to investigate, but it might not be soon, I'm afraid. I need to finish  work on some other module first, before I can turn my attention to Matrix.

Thanks for reporting.

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By cosmicsafari
      Hi all,
      Just wondering if someone with a bit more PW knowledge than me could give a run down of what this method actually does and how its achieved.
      I get that it rebuilds image variations but based on what settings?
      If I wanted to rebuild all the websites image variations but at say a reduced image quality can this be set somewhere globally that this method would take into account?
      For some context I have built a fairly simple module to delete all the image variations connected to any FieldtypeImage which is being used on the website, for the most part this works quite well. As I was quite happy with how that turned out I figured I would give the module another option to rebuild the images also. So there would be a 'Remove' and 'Rebuild' button on the modules config page.
      The idea being that I could use this tool to delete all the image variations, update some global settings then regenerate them all but currently it doesn't appear to do that.
      I assume this is either because my codes borked or im misunderstanding something fundamental about how rebuildVariations() works.
    • By adrian
      Tracy Debugger for ProcessWire
      The ultimate “swiss army knife” debugging and development tool for the ProcessWire CMF/CMS

       
      Integrates and extends Nette's Tracy debugging tool and adds 30+ custom tools designed for effective ProcessWire debugging and lightning fast development
      The most comprehensive set of instructions and examples is available at: https://adrianbj.github.io/TracyDebugger
      Modules Directory: http://modules.processwire.com/modules/tracy-debugger/
      Github: https://github.com/adrianbj/TracyDebugger
      A big thanks to @tpr for introducing me to Tracy and for the idea for this module and for significant feedback, testing, and feature suggestions.
    • By Mike Rockett
      Jumplinks for ProcessWire
      Release: 1.5.51
      Jumplinks is an enhanced version of the original ProcessRedirects by Antti Peisa.
      The Process module manages your permanent and temporary redirects (we'll call these "jumplinks" from now on, unless in reference to redirects from another module), useful for when you're migrating over to ProcessWire from another system/platform. Each jumplink supports wildcards, shortening the time needed to create them.
      Unlike similar modules for other platforms, wildcards in Jumplinks are much easier to work with, as Regular Expressions are not fully exposed. Instead, parameters wrapped in curly braces are used - these are described in the documentation.
      Under Development: 2.0, to be powered by FastRoute
      As of version 1.5.0, Jumplinks requires at least ProcessWire 2.6.1 to run.
      View on GitLab
      Download via the Modules Directory
      Read the docs
      Features
      The most prominent features include:
      Basic jumplinks (from one fixed route to another) Parameter-based wildcards with "Smart" equivalents Mapping Collections (for converting ID-based routes to their named-equivalents without the need to create multiple jumplinks) Destination Selectors (for finding and redirecting to pages containing legacy location information) Timed Activation (activate and/or deactivate jumplinks at specific times) 404-Monitor (for creating jumplinks based on 404 hits) Additionally, the following features may come in handy:
      Stale jumplink management Legacy domain support for slow migrations An importer (from CSV or ProcessRedirects) Feedback & Feature Requests
      I’d love to know what you think of this module. Please provide some feedback on the module as a whole, or even regarding smaller things that make it whole. Also, please feel free to submit feature requests and their use-cases.
      Note: Features requested so far have been added to the to-do list, and will be added to 2.0, and not the current dev/master branches.
      Open Source

      Jumplinks is an open-source project, and is free to use. In fact, Jumplinks will always be open-source, and will always remain free to use. Forever. If you would like to support the development of Jumplinks, please consider making a small donation via PayPal.
      Enjoy! 
    • By anderson
      Hi all,
      I'm a new to website building. Learned some CRASH course of js,jquery,php. Then I found CMS. Still learning around forum, youtube....
      Anyway, please help me with some beginer questions:
      1, About template - please correct me if I understand wrong : every page should be (or recommended) built on a template. So if in total I'll have 10 pages, 2 of them have same layout, I'll need 9 templates.  And, what fields a page includes, is not defined in page, but defined in the template that page uses. 
      2,  Where to see what modules I've installed? is it in "Modules - Site"? 
      3, I installed "PageTable Extended", then what?  As in a youtube tutorial, it should appear in Setup tab, but it doesn't.  What's in there: templates,fields,logs,comments. (I installed "Uikit 3 site_blog profile".)
      4, I did a search in Processwire website for the famous "repeater matrix" module, and can not find it, there's a Repeater, as well as a Matrix. Is it not a module?
      5, I watched this youtube tuts: https://www.youtube.com/watch?v=IHqnLQy9R1A
      Anybody familiar with this tuts please help: 
      After he analysed a target webpage layout he wanted to mimic, he created some fields, some template, then based on those he created a page and input some "content" in there, then clicked "view", it's just some text. So, here comes my question, he copied a folder "assets" (subfolders are: css,fonts,js,img) over, then the page have the appearance/layout he wanted to mimic. Where does that assets folder come from?
      Appreciate any help.