Skip to content
Amigo edited this page Jun 3, 2019 · 34 revisions

DynamicGet

Sermon - Preacher Get Example

Hi we still working with sermon distributor. I'm going to use this preacher, which is a get that I already have set up here. I'll use that in our illustration. Here we can see that I have this back end 00:00:25 view selected. So let me select nothing. This is usually how it will look when you start. You'd look select this, (depending on which 00:00:39 area of the back end you want to get the data from) you'd select back end view. Which is the best way to do it.

Dynamic Get Source Selection

Then there is the Joomla database option. Would gives you the access to draw data from any other component installed that moment in the Joomla Website. 00:01:01 If you select your Joomla database, you can select any database that is actually at that stage on your database installed. That means you can reach out to other components through this dynamic get. I'm not going to do that. 00:01:21 In fact that's also an area which I haven't tested so well. You possibly might try to implement that and ran into some bugs. This stage I can't make any apologies for that since the thing you should do is, instead using back end view option. 00:01:42 You might say but why is the other option there? Well it's because that's a feature we certainly want in the application. I'm busy working in that direction, busy programming so did that feature will work without any problems. In fact for the most part if you don't do very complex mapping, if you just do a simple direct database fetch like that(cb_associations), you will be able to use this, it won't give you an issue. 00:02:09 What it really is about, is these other linked or joint database structures. That would make it complex. That might cause problems. I'm not 100% sure. Obviously it did work. I haven't tested it well enough as well as I have tested the other part and that is this back-end view. 00:02:32

There is also the custom option. Where you can just dump the whole option of using component builder to write your PHP for you. Here(custom Get) you can add custom PHP, it will add the methods data for you. This is a custom get option where you write the code 00:02:55 by hand. Where as this(Custom - dropdown) option writes the code for you. You'd select the back end view that you want to use. That back end view will be the view that you connected to your component. You need to type your name in here, and then select that package, and it will load 00:03:20 all the field names, like a.id, and a.asset, id, and a.name, and allias, and icon.

Dynamic Get Preacher View

These are all the fields inside of this(Preacher) view. I will load it and I'll put this as asset_id. I would suggest you don't change that. What you can do is you can take out a row. 00:03:50 You can remove a row like that, and you can say I don't need that row. I don't need these. Way to there, that's all the data you might want. And then you will know that this would be the variable name of the data on when these get is used. 00:04:13 That is the basic part of setting up a Get.

Get Types - Get Item/List Get Custom

I need to mention that you have getTypes as well. The getTypes have 4 of them. The getitem which will get one item from this preacher table. Then you got the getlistquery which will get multiple items. 00:04:41 Depending on how many items you want to get from the database, you would select either get item or get list. Then you get getcustom, and then you got getcustoms, that plural. The difference between these two or four is the getitem is what you will use only once per 00:05:04 view.

If you are building a custom admin view, you will select a main get either, or a getitem or a getlist. You can add multiple getcustom item or getcustoms item. You can see these as other methods that you're adding to the page, but it's not the main method. 00:05:30 You have main methods which are these getitem and getlistquery. Which by the way is the exact naming of the methods that will be used. Then you have this getcustom and getcustoms, which is almost same as these two, it's just that they are not main. There will only be another method in the model which will bring data to the view. You can add as many getcustom and getcustoms 00:06:00 methods to your view as you like, but you could only add one getitem, and one getlistquery. Usually the way we would decide on this is that we would say what is the main objective of the view? What is the main dataset that we want to use in the view? That is what we will use in the getlistquery and getitem.00:06:27

Get List Pagination

If the main purpose of the view show preachers, a list of preachers, I would use the getlistquery as the main selection here. Now you see that you have when you do a listquery, you have the option of adding pagination. That would mean whether the data should only return a certain number. Joomla has a global number. Which you set in the system administrative area under your global settings. 00:07:00 Go to system, then global configuration, then you see there is a default list limit. That is what will be use as the amount that limits the data being returned to the page. It will only return at this stage 20 items. 00:07:26 If I set that pagination to yes. If I set it to no, it will load all the data. Yes would just load some of it, and no will load all of the data. Depends on what you want to do. If you want to do an Ajax, you want to be sure that all the data is being loaded every time. You rather use JavaScript set up pagination for your view, then that is why you would use the no switch most of the time, just say yes. 00:08:00 Component builder will automatically add the pagination code to the page. It will also automatically add pagination code to the model, at the bottom of the page, it will show a 1, 2, 3 pagination. Depending on the template you are using and the styles that are on the page. If bootstrap is not on the page, that 1, 2, 3 might possibly not look right and you will need to add styling to it. 00:08:31 Component Builder doesn't know what style is on your page so they cannot make provision for all of that. But it actually can load the pagination itself. it

Join Data Views - Tables

Now here you have data and you can join this data to other database tables. Again here like with the main source you're able to select 00:08:57 joint views from a table. A view table which is the views of the component or just any database table. To one of the database tables I often connect to categories. Component builder integrates it's application. If you add a category field to any view, 00:09:22 it dynamically set up a category for your component. And integrates the category concept into your component, so it writes all that code for you and the way that Joomla's own applications like article manager does it. It's using the same conventions. If you know how Joomla article manager is bringing categories into the articles, then that is the way your component is going to do it. Here(DB Table - cb_categories) you can select categories. 00:09:54 These switches, I'll deal with them when we come and look in more detail at this area. Then you can model the data there(Selection). Model means decide what you want to return. You don't want to return everything from categories.

Join View Tables Example

But the one I want to look at first is actually this joint view table. We'll come back to the DB option. The joint view Table, let you again select from any of the other views that is part of your component. 00:10:25 Again you can select whether it should return a single row or a list of rows. When you say single row, it means it's going to join it to this other data set that you have as your main data or your main source. It will just be another item in the array. That's why you can't use the name 'Name' for example here. 00:10:51 It needs to have that series_ in front of it. So that it doesn't clash with the other data set that possibly also has a value called name. So again if you select anything here(Scaling Factor - dropdown), Series, you will see that it will populate this(Selection) area with all the fields that is in that view. Then this 'AS' button here, 00:11:21 you can't use the same alphabetic number twice in the whole query. The whole get function can only use 'a' once and then 'b' once and then 'c' once and then 'd'. 00:11:40 We'd made provision up to z z. That is how many tables you can have. Only in this area here(AS).

You would first decide whether this 'Return Row Type', what type of return it will be? If you set it to multiple, these names automatically update. 00:12:02 The way that the get method will work, is it will create a new method which will get this data and add it into your item list via this relationship. I'm adding the 'On Field' as the a.series that's where the id is for the series. 00:12:24 In the joint field, I'm using the 'c.id'. In the main database, that is the 'a' database, there must be a field called series. It has the id of the series. It corresponds to the id in this list. If I wanted to return a multiple, it means that the main database which is in this case sermon, can be linked to multiple series's.

But in the system we are working with here, 00:12:56 that is not possible you can only connect a sermon to one series. That means it's certainly a single return. Then it will immediately add this series_ in front of everything to insure it doesn't clash with your a table. That's what it's doing. Again you can remove the fields you don't want but please do not edit 00:13:18 the string. It possibly would break. I want it to be possible that you can change this name to anything you like. We are going to try and do that eventually. You can be changing it will still write it this way in the code. That's part of why I'm saying you shouldn't change it not because it will break something, but because it will be ignored and you might expect something else than what it is actually doing. Still it is going to use this implementation, even if you change it. 00:13:54 It will drop the fields you don't select. If you say I don't want these, then it won't get those fields and you will only have this data returned. Again here you can have equal, not equal, equal or not. We also have 'IN' function. That means 00:14:22 if this 'On field' is an array, then you can use the 'IN' function to make sure that it actually looks whether the id is in this array. That's the in function. 00:14:45

Dynamic Get Preacher In Code

This code if we go to the component itself, I'll show you where it writes this code. We're looking into sermon (preacher id). We'll get to why it says preacher id, when we look at the filters and the where. 00:15:06 Let's go to the code. You can actually see I'm going to refresh this page, and then go to the code. Since this get is used in the front of the component, we will go to the front end and not to the admin area. We go to the front end of sermon distributor. Then we are looking at the model. The dynamic get is used in the model to get the data. 00:15:33 We are looking at sermons. Let me just make sure if that. Yes, it's sermons. It's getting a list query and it's using pagination getting all this. We're looking at sermons. Sermons under the preacher id, it should be this model. 00:16:02 I could get you into the code. You can see the main method which has this id(a.name)or the data set. It is written here(selected area on video). Here you can see id, asset, name, alias, link, types, short description. 00:16:26

If you look at the UI it says the same things, alias, link, type, short description, icon, preacher, series, category, id. This is where it writes it. It shows you where in the compiler it's done. Then it sets up the second one series. You can also see it says series 00:16:50 = c.id. So series, there(see video) is series, =, the c, this table, series, id. Then it also tells you what it wants from c. It wants the name and the alias and then it wants a series name that changes it to series. 00:17:12 Since this is in the select query. This is one function there. That array(array('c.name),'c.alias) transposes to this array(array('series_name', 'series_alias'). That is the way that you make use of Joomla's database API. It has a thing called quotename 00:17:35 which you can pass to arrays. The first array being the name of the value, which in this case is name and alias. The second array, is what you want once the query is completed. So it links this(selected area on video) into the the query one-by-one. All of those even the category one is linked in here. Then 00:17:59 it does a check whether there's an id. If it exists, it checks whether it's a string. If it's a string, it adds a quote. If it isn't a number, it adds it directly. That is where the query is done, here return false if there is no id. We'll look at this area in a moment. This is done 00:18:23 to the filtering and the wear.

I just wanted to show how it adds this preacher as well as series to the query. If we look at the back, open up here(Join View Tables - Add), you see that series and preacher 00:18:41 and statistics. We select multiple statistics because for one sermon there can be multiple files, and per file there will be a number. So if we look at how he does that. 00:19:02 It is first does the query and here in getitem, it adds a new function called 'getidSermonstatistics' and with a random key(Fcff_E) to ensure that it doesn't conflict with any other method on the page. We had to add this(Fcff_E) random key here. It puts it into this variable. That something that you need to 00:19:27 come and look at.

Possibly when we look at the site layout area as well as the templates, I'll be talking about this transition here again. What you need to know is that this variable, And I'm trying, inside of your layouts and your site views and these things, to give you the correct name. But it is not 00:19:51 type correctly. Possibly you need to come and check this if it doesn't work. I'll explain that when we get there. We're adding statistics into this(idsermonstatistic) variable through a method which is also on the page and we passing the id of the sermon. If you look at UI, this is exactly what we're saying here. We're saying, get statistics multiple, 00:20:19 join to the left. You can select any of these(dropdown).

??? Then use the main table dot ID Must be equal to e.sermon And then this is the only values I want to return From the e.sermon So the e.sermon is this value here okay o I'm saying a ID must equal is e.sermon 00:20:48 And then if you look at the code It basically if we go to this function which should be just here there it is. It takes that ID And Places that next to e.sermon and puts into its place Basically also here's the two arrays what it What it is in the database and what it should be now And it checks whether executes, checks whether it's got any arrays or any values 00:21:17 And then returns that is an object List And that then gets placed inside of this Space inside here Now you would see this area here Is actually custom scripting So if we go back to the dynamic get you see that there is a custom script area here If you click on that You'd see that there is Different switches 00:21:54 You can select Get list query Or before getting the items After getting the items If you select after getting the items And you place any code there Then data gets dumped right after The initial items we've Received It will it will add that 00:22:14 Code in there and then only return The items So that is why you can model the data Right there in the dynamic get You gonna write the code For the data After it's been get And you can check If I remove this Code here you'd see tells you that there is an array of items 00:22:33 Where all values are And then I'm just saying I want to be sure that those items are set and that they are there Before I start doing it on each of them And so again here I'm using Some double You know the street bracket component helper functions to check whether the String is there So you can dump some nice PHP Even before getting the item you can add some filters or get list query 00:23:02 Before the if you if this is model list If this is item You'd see that Then there's a different set of Switches is available And so it Adjusts to To the type of Query type up here Ok 00:23:19 Coming back to this area Let's again look at the database table option Basically you see I selected category and it's a single row that's returned I called it b I joined it left and I said a Cat ID must be equal to b ID Which is the ID of the category And I only want The title And the alias So that is 00:23:44 how we set that up I need a title in the alias And it returns that for us Then It links it in there and that's part of what you saw here when You looked at the query option here Basically the sixth section here Now let's look at the filters You see where we've a filter And a where and an ordering and setting of Globals 00:24:12 now the setting of Globals if you have a value in this query That you possibly want to use in a custom query which isn't even Setup yet but you want you know I'm gonna need this value in the model Then you can through this Global option here You can set a global area now Again here you should maybe test it There is an option of using this and State 00:24:38 there is the different type of Set types You can set the value to state or you can set the value to this And here you need to know key so So let's I wanna do the name Obviously in this case is not gonna work ideal Because you got more than one name So usually this Global function only functions well 00:25:01 When you are returning a single Item so when you only do get item not get list query But you do get Item Then this make sense and then you can give it a name And it will add it to the global Scope of the method or the model rather Which you can access through other 00:25:24 Model Methods Which are custom Methods Ok so that is setting the global The filtering You have a a list of possible filtering So Depending on what you wanna do You might select ID or user or access level or group or category 00:25:45 or Tags or date Some of these are not really well formulated yet like date doesn't work that well yet But categories does user group access level user and ID does well You know this function variable works well and Array Array value repeatable value and other All those already work very well And you can already use them and Implement them Now the only way for you to really 00:26:15 Know exactly how it works you need to know a little PHP and then you need to compile and go look in the code what it has done and where it's placed what And that Is Why I showed you that this is all set in the model Ok So currently We are saying we wanted to do a J request Get into here by ID 00:26:39 So this is the get area that I added I look in The code it says State the key and it's this Here you see and we set it is a function variable So it doesn't change or adapt this at all And then says it must be equal to preacher So what we are doing since component builder doesn't know where the this variable is gonna be a string or integer That's why we have this function which first checks were that is string 00:27:08 And then checks whether it's a number And related and builds up the query respectively You might feel that is too much and you're Possibly right But that is the only way I am implement it at this stage And getting more developers involved May possibly improve this long run Then you see there the Access Now we have a bunch of values that fire every time in a custom 00:27:39 Dynamic get model And it is the these values And often times you you might need these values So instead of you Having to do custom scripting to get these values on the page We add these values dynamically every time So the user ID the group The authorised group the access level The app and then the input values Which by other URL or post is on the page 00:28:08 And it tells you that it's been initiated so This is set to true so that if you have custom Methods Like this one get Preacher It's checks whether it's been set And if it has been set it doesn't set that again it can just use it But if it hasn't been set it sets it and also again sets it to true So 00:28:32 variables Global variables Can then be used inside of the coaches like the global variable we spoke of earlier Ok so Out of that Global variable We are Actually accessing This levels And so it's this one here Which basically has the get authorized view levels Of the specific user 00:29:00 That is now you know accessed this Model or the view that this model belongs to And if he is in these access levels So you remember that public is another access level And so if the user isn't signed in he's a public it will this will validate true in the query Ok so We set that up simply by adding access level In A access 00:29:28 So you must check in the Main Source table For access And whether this user is in that So that means you don't need to add a state key because The code is done for you Ok That is some of the filters then the where 00:29:48 Is you can add any table key Equals to a certain value now that Value could be another table like b field or it could even be a global variable like we said we could set up So it can also be in ID, a user ID now the user ID is already On the table so it could be Just user ID And or it could be like we've done it this case just an integer which is one So we wanna make sure that all the 00:30:18 Sermons returned Is published And if you have an unpublished sermon it shouldn't even Return it at all Ok so That's what we doing with that That is setting up a get list query With pagination Through this Ordering method we just saying use the a ordering 00:30:39 and a send now you can order all the items Just add many as you like Be sure that the table that you ordering You could even use a name right So could be a name As an ordering Table key Then it you could do it a descending or ascending Then it would be added to the query 00:31:03 Ok That is also added ordering To the data set From Your Dynamic get method and so here with the joint view tables you can do very nice Dependency Calls From other tables in the backend And bring the data together into one items array 00:31:25 That's basically what Dynamic get is for and as you saw We have A The normal what I call main source on the table sorry in the model And then we have this other one called get preacher So That is another Dynamic get function which we 00:31:45 Looked at it's called this one Get preacher if we Open it We see it's a It's a custom Get custom And we gave it a cluster name called get preacher and this is It's relationships So it is basically having No 00:32:04 Relationship there Neither here so it's It's not linking to other tables It's simply getting the preachers details Right there Simple as that But it has a filter which is basically using the same integer And access levels as the filters It's also using a where I suppose yes published and it doesn't need ordering Because it's just one preacher but I none the less added the ordering I could actually delete this 00:32:41 And it doesn't have any globally settings okay so that is get preacher and so from the This settings here I don't think there's custom scripting nope from this settings here component builder writes all this code You'd see that we have this function everywhere called UI kit comp And then we using a global method a static method get ui comp it's a method that I built if you know uikit if you don't know it go to get UI kit or just google it It's a It's a JavaScript Library CSS JavaScript library which really makes modeling of your views very nice and easy And it has components that you can use So like tool tip and model 00:33:45 All these kind of models but Gordian is another component And we don't load all of it's components every time so what we've done is we've Written in PHP a method that looks at Fields that are text area fields And normal text Fields no mostly okay it's Not looking at every field is only looking at the text Fields and editor Fields so in in this Component we know that this description field is a Editor field and so we are sending it to this method now you can go look at this Method Method In your helper class it's over there Here's the method so So it has the classes that already has been identified which is what this 00:34:56 Initial this component area sorry Field name field value model field value is actually holding it's Holding any component names that already has been identified this gets past also here with the content then we check in the content whether there is a class UI UK underscore and if it's not false we start looping to check what What what are all the components that are in there and here is the list of the components that are available and so On-the-fly we are determining whether these components should be loaded just by Looking at the content that was placed in the description field and then we added back to this Array so it updates this eventually you have an array of All those items and in the view we go to the view 00:36:00 Which in this case is gonna be preacher We open the view dot HTML We get to a place which basically everything is gonna be happening so These are of the components that go in component builder compiled the application it looks inside of the content of your site view as well as your custom admin View and it identify that these components must be loaded for uikit and so it Places it here dynamically but since you could've added some components inside of the script that that is stored in the description area it now has this get uikit component which basically reach back into the model and in the model gets this Variables value through a method which is here at the bottom of the page there it is 00:37:04 Get UI kit component basically through this method it is reaching in Into getting that array and once it has that array we basically check whether it is set Whether it is an array and if it is an array we set To the array that is already on this page then over here we loop through that array And we load in those components CSS and JavaScript as required so that You always can be sure that the UI kits needed components will be loaded on the page simply by user adding some of that components to its description as style Because the way uikit works is you just like Bootstrap you just Add the class name To the specific div or tag html tag and then it activates the needed scripting around it which is a nice library but it's 00:38:08 Quite heavy and you don't want it on the page every time now I know you could have done this through JavaScript You know it is fact they have a way for you to do this through the JavaScript but to me I felt Let me do the most work in the html so relieve the load on the on the server And that the browser already has much more Leverage and Freedom so that's why we This feature this is maybe Beyond the scope of the get the dynamic get But since we ran into I quickly mentioned it here okay so it is all Also placed in the query that is developed by Dynamic get that's partly why it Fits so once you've got your Dynamic get set up you now will add these dynamic Gets to either site views or to admin custom admin views so these Dynamic gets is what What gets the data for you and it's where you model the data that you want to work with and you can then 00:39:12 Use them in site views and custom admin views. Now next stop we will look at adding it to a site view and how all of that works. Thank you for watching.

Clone this wiki locally