Updated 011 Component Scripts (markdown)

Amigo 2019-06-11 09:09:34 +02:00
parent e0949569ab
commit 8dac3ef666
1 changed files with 3 additions and 3 deletions

@ -29,11 +29,11 @@ This is a place for you to add your own custom scripting to the helper_admin Cla
This event concept has been briefly mentioned before, but what we want to achieve with the event is basically: Let me explain. [00:08:09](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h08m09s) If you look at the back end part of 'sermon distributor', it has a file which is the in main file which Joomla calls 'first', and in that file it basically triggers that global admin event. The global admin event is nothing else than a function inside of your helper function. So it always triggers it, [00:08:40](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h08m40s) if you add that switch. Then it passes the document object. The document object is being built up here. I'm just passing it over to the global event. There is no need to clear it. If I was to open the helper class, which we have here(See video), and scroll to the top, it says here [00:09:08](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h09m08s) 'loaddropboxajax'. This again is just another function. I wrote that function that you can add whatever functions you want to run globally every time a page opens. That is a way to run it like a chronicle task on the front and the back end of the component. If you have things that you want to be done chronically, this feature is targeted at doing that. [00:09:35](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h09m35s) In this instance we are loading the 'LoadDropboxAjax'. If we go back to the component, you see that I am just adding that script. First I just clicked global admin event 'yes' and added that script. That's all they added. That script was taken and placed inside of the global event. The trigger'globalevent' is set by component builder you don't need to write that. [00:10:03](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h10m03s) It will insert this'globalevent' trigger itself just because you clicked 'yes'. You need to then just add the script that must run inside of the global event. Which I decided to be another function and then this function which I want to run, I added to the admin view, you see here(See video) at the admin helper class. [00:10:29](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h10m29s) I added that function . So I basically just used that'loadDropboxAjax' name, and called it 'self', because we are inside of that class. That's how you call 'static class method' and pass same information. In my method I'm adding JavaScript to the document object. I want that document and then I set 'addScriptDeclaration'. [00:10:59](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h10m59s) That means on every page of this component in the back end, it adds this little script which then calls by Ajax which I explained previously and it starts checking the Dropbox listing automatically. This automatic feature has been added to the component so that you can do the same in other components. That's the purpose of the event switch. The same is applicable to the site area. [00:11:37](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h11m37s) I also added that same class.
### Add Custom PhP Helper Site View
### Add Custom PHP Helper Site View
Why is there different helper classes for the front and the back? Well, it's about security, and permissions.
There are things that I wanted to do in the back end, where not many questions are asked. Where on the front I might be more protective. So for that reason and implementation also is often different in the front than in the back. That's why we have two different files: Helpers site class, [00:12:09](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h12m09s) and the Helper admin class , custom scripting can be added. I added that same script to the front and also added a site event which also triggers that same script. What if everybody triggers the script? Is it not going to run multiple times? Well, [00:12:32](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h12m32s) that's exactly part of what has been done. I actually added a feature in the Ajax call. That logs whether it's already active. If it is active, it just ignores that call. So basically it has a controller over whether it should run or not. It has a timer you can set [00:12:56](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h12m56s) for the sermon distributor. You can set how often you want Dropbox links to be updated. Every day, every 2 days, and so this script(See video). If it wants to update and it's not time it just dies. Since it's Ajax the user himself don't even notice a delay in his page. The page opens as fast as it always do and then fire that Ajax call to the server. Which will starts this whole process on the server. This is all possible inside of component builder, simply through these custom areas.
There are things that I wanted to do in the back end, where not many questions are asked. Where on the front I might be more protective. So for that reason the implementation is also often different in the front than in the back. That's why we have two different files: Helpers site class, [00:12:09](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h12m09s) and the Helper admin class , custom scripting can be added. I added that same script to the front and also added a site event which also triggers that same script. What if everybody triggers the script? Is it not going to run multiple times? Well, [00:12:32](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h12m32s) that's exactly part of what has been done. I actually added a feature in the Ajax call. That logs whether it's already active. If it is active, it just ignores that call. So basically it has a controller over whether it should run or not. It has a timer you can set [00:12:56](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h12m56s) for the sermon distributor. You can set how often you want Dropbox links to be updated. Every day, every 2 days, and so this script(See video). If it wants to update and it's not time it just dies. Since it's Ajax the user himself don't even notice a delay in his page. The page opens as fast as it always do and then fire that Ajax call to the server. Which will starts this whole process on the server. This is all possible inside of component builder, simply through these custom areas.
### Add MySQL Dump
@ -45,6 +45,6 @@ Then we have this nice feature called dashboard methods. Let me show you what I'
I could spend more time in explaining and less on typing. I created a [00:15:26](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h15m26s) method called 'getusagedata'. It's a public function method and inside it I added my script. Inside of this script I'm calling other methods which I made it protected. the script that must be called from the dashboard tab. You set that up here'Dashboar Tab -Add'. Here is the tab, and it's HTML. We called the tab 'Usage Statistics' and the header we made 'Table', [00:16:01](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h16m01s) and here(see video) is the 'HTML'. Which we are using. and in the HTML you see PHP and the way we do that is with that convention of '<?php echo' and then closing it again there'>?' and checks whether the usage data is there.
How do I know that I should target 'this usage data' and then 'items'? Well, this area 'usagedata' is a convention area. The way that, that convention works, is [00:16:46](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h16m46s) by that one there. (see video). So'Usage data' relates to 'usage data'.The moment you add the word 'get', in front of a function, it will be added to a 'global', the result of that 'get' will be added to '$this->' and without the 'get' name, so that is the convention. [00:17:15](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h17m15s) The convention is you could've called that 'get', 'manonthemoon'. Then this would be 'manonthemoon' all in lowercase. That(get) will be dropped and this(UsageData) is going to be used lowercase, just as the 'this'. [00:17:37](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h17m37s) That's the convention. I know it might not be that obvious but it works. So your other functions, if they are protected shouldn't have the word 'get' in it. At the moment it's set, to 'set'. That one is set, this one is 'visitcheck'. This one is set 'companies' and set 'countries'. [00:18:03](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h18m03s)
How do I know that I should target 'this usage data' and then 'items'? Well, this area 'usagedata' is a convention area. The way that, that convention works, is [00:16:46](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h16m46s) by that one there. (see video). So'Usage data' relates to 'usage data'.The moment you add the word 'get', in front of a function, it will be added to a 'global', the result of that 'get' will be added to '$this->' and without the 'get' name, so that is the convention. [00:17:15](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h17m15s) The convention is you could have called that 'get', the "manonthemoon". Then this would be 'manonthemoon', obviously all in lowercase. That'get' will be dropped and this 'UsageData' is going to be used lowercase, just as the 'this'. [00:17:37](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h17m37s) That's the convention. I know it might not be that obvious but it works. So your other functions, if they are protected should not have the word 'get' in it. At the moment it is set, to 'set'. That one is 'set', this one is 'visitcheck'. This one is set 'companies' and set 'countries'. [00:18:03](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h18m03s)
A lot of PHP can be added in here and all these PHP together gets the data that is needed on the page. When all the data is collected it is placed in what is seen as the 'item'. A field or a method value is returned. [00:18:43](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h18m43s) This method value is being populated in this sub functions and in one of them is added the name, 'items' as a pointer and it is a object. [00:19:09](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h19m09s) The code itself will not be explained right now, but this'usagedata' is getting returned, because it's an object. If you look here you are able to target 'items' as an object and if it exist, if it is set, you can start looping through items and certain places you are using totals and different values. That is just adding some of that data to the page. [00:19:45](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h19m45s) This could have been a simple class, in fact you could have left this out completely and could only put a comment. You could have done this(see video). You can set it 'not needed' and then in here 'Dashboard Tab - Add' you can do HTML. If you just want to give information to the user concerning the person who made the component, maybe some would like to run a RSS feed here(See video), you could have done it right here. [00:20:34](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h20m34s) I'm just showing you that you can reach into PHP here, and that the PHP that you reached in, has the convention of dropping the get and then using that front area, 'usage data', to place information in which you can parse in your HTML as you would do in any other component view. This has been just a quick overview of the script area of a component. It's something that might become very useful if you are a developer, to inable you to add custom scripting to a component through this methods. In the next tutorial we will look at 'ReadMe' and maybe their FTP server concepts. [00:21:27](https://www.youtube.com/watch?v=xY9TWQrF8AQ&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h21m27s)