Transcript
00:01 All right, there we go. All right, so um so I'm not going to do the whole reintro for everyone that just catched the recording. I've been working a lot
00:10 on Total CMS 3. We're going to give a tour of uh pretty much everything that I've been working on. Um so, okay, let's go ahead and share my screen because that's the important part.
00:23 Okay, let's go ahead and let's go into All right.
00:32 Um Okay. A lot of what I've done is um a lot of it's in the dashboard. Okay. Um actually, let me bring up my I'm going
00:41 to bring up the uh community in a Okay, just to kind of re remind myself what the heck we're
00:48 doing here. Let me just go ahead and that out there. So, I have my list. All right.
01:11 Um, but there was quite a lot of limitations, right?
01:15 Um, and I I didn't think there were limitations until a couple users, primarily Bill Burton, if he's here. Um,
01:23 Bill uh tried to import 4,000 stamps and things just uh well, kind of didn't work
01:30 too great. You had to upload things in smaller chunks and he ultimately got it all done, which is quite impressive. But
01:37 um yeah, I wanted to make that make sure that that was better because importing your data shouldn't be a stressful thing. It it would
01:45 be the experience your first experience of using total CMS importing data um if it's seamless, right? It's kind of an
01:53 important thing. It re really gets you going and started on the right foot.
01:58 Okay. Um, so when we're in a uh collection, right, you'll notice that there's, if you've never clicked on this little button here, there's you'll notice there's a lot of new things here.
02:08 Before, I think there was only two or three. Um, so yeah, we're going to go into import first. Okay. And you'll
02:15 notice here that there is an import this import page is completely new. Before it was it basically looked pretty much this little form. Now we got all kinds of
02:24 stuff going on in here. Okay. And the big thing that took um quite a quite a
02:31 big effort was there's this thing called the import queue. It's actually an entire job queue now where total CMS can
02:38 process various jobs in the background which is pretty cool. Um so
02:45 yeah here we can go ahead and you know choose let's say a CSV uh import. And the big thing here is uh if you click
02:52 this Q jobs checkbox um this will essentially um load all the
03:08 importing um a lot of image data or um something of that nature um a lot of times processing those images can take a
03:17 long time. So, if you don't cue it and you just, you know, choose a file, um, and basically have it process it immediately, it'll probably work with a
03:26 handful of images or files. Um, but, um, yeah, if you have, in Bill's case,
03:35 you know, a thousand plus or a lot of images, I think he he could do like 20 different stamps at a time. Each one had
03:42 potentially one to a dozen images, right? And basically, yeah, now you can just cue that job and that'll happen in
03:49 the background. Um, as long as we'll go over the setup. There is some setup for that process, right? But, um, yeah,
03:57 other things here. So, uh, we have JSON import. So, we can actually import a JSON file um, which is slightly a slightly more
04:05 rich um, content uh, because Total CMS has a lot of stuff such as images and whatnot. We'll look at that in a little bit. And here we can uh, manage the
04:14 queue. Basically we can clear the import Q for a particular collection as well.
04:18 Okay. Um and while we're talking actually here let's just give you a data or let's give you an example here. Uh let's go ahead and uh start processing
04:27 this. So um let's go into uh let's see what do I have? I have a
04:34 blog and I think in here I have I have two blog posts. All right let's go ahead and see
04:43 uh Do I have them in here? Uh, let me just make sure if these are in there. Test
04:51 import. Oh, let's look search for import. Uh, David's David's in there. Okay, let's go ahead and delete David.
04:58 All right. So, now uh I'm going to go ahead and import two new uh blog posts into here. So, I'm going to go ahead and
05:05 say import. I'm going to say choose. And I'm going to choose the blog
05:12 CSV file. We're going to say open. All right. And then um for right
05:20 now, I'm not going to cue. Actually, I showing off the queue. So, let's go ahead and do that. I'm going to cue these. And I'm going to say import into collection.
05:31 Okay. Voila. Now, with those just two blog posts and each one had one image, I could have just imported that without
05:40 the queue, but I wanted to obviously show you how the queue kind of works, right? Um, and if you didn't know, if you're new to the import
05:47 process, obviously you know that CSV data um does not actually hold on one second.
06:01 Sorry, gardener showed up with the dogs and they go crazy.
06:06 Um, so obviously, um, you can't have a image file inside of your CSV. So what I've done is I allowed you if you place
06:14 a path to an image. Um now this has to be the image has to exist on your server. Um but if you place a path to
06:22 the image on your server in the CSV, it'll import that into um the blog along with your all the other data for this
06:31 blog post, right? So pretty cool. Um same thing for gallery. If you if you define a folder, the path to a folder, all the images in that folder will get added to this particular blog post.
06:42 Okay, which is pretty cool. Um, okay.
06:46 So, um, yeah, let's talk about the job cube. Okay, so now, um, these jobs, you'll see the little table up here. I
06:54 have two imports in the queue. Um, and they're currently pending. Okay. So, here you can see what type of jobs are in the queue for this collection and then um what the status of them is.
07:05 Okay. Um now, uh let me go ahead and I'm just going to manually process this queue really quick. Just give me a second
07:20 here. All right. So, I'm I manually just ran that job. Okay. And if we'll notice, uh, that actually went from two to one
07:28 to zero. I don't know if you saw that, but these tables updated in real time as that data was actually imported into the
07:35 system. So, if you have a large import job, you can kind of just have this window open and just kind of, you know, watch the status of uh, you know, the
07:44 imports going down, which is pretty cool. Okay, now let's go ahead and check those out. Let's go ahead and and uh they both had the there there's our two um blog posts that I just imported.
07:56 Okay. And uh I mean it's just not exciting data at all, right? But it has an image has the content which is pretty
08:03 cool. Um if we go into David, we can see that it actually has a lot of the exip information. Oh, this one the other one has exit information. Um it did import
08:11 the color palette though, right? So, it processed that image just as if I were to upload it um online, which is which is pretty cool, right? If we go into
08:20 this one, I think this one has some XIF information, but just so you could see um there we go. This one has some XIF information. Um and you know, the color
08:28 palette and all that jazz as well. So, pretty cool. Um it's a great way of importing and again uh that process cue
08:35 is pretty exciting. Um and we're going to we're going to be using that for a lot of other things in the future. Okay.
08:42 Um there is a new import docs now. So if you click on this um I have a lot of information about the um doc or about
08:49 how to um you know use imports and you know some some stuff about the CSV files and what you need to do there. Um some
08:58 stuff some special stuff about JSON some special stuff about as I said you can provide image and files as paths. Okay.
09:06 Uh which is pretty exciting. Um, there's also a Q manager page. Okay. Um, and if you go in into here, it's actually in
09:15 the utilities job Q manager. And you'll see the same little tables here, but these are global. So, it's it's the stats across all collections in the CMS
09:24 where you can see all the current jobs that are in the queue. You can also clear all the queue right now if you wanted. If there were any jobs in here, I can go ahead and click on that and it would clear any jobs in the queue. Okay.
09:35 Now, how are we going to configure this background job to actually process the queue? Um, so on
09:44 this page here at the bottom, you'll see that there is this little code box here.
09:48 Um, this should be uh customized for your server. And all you have to do is copy
09:55 this and paste it into your host scheduling tool. Okay? I recommend scheduling this probably like every five
10:03 minutes. You can do it as much or as little as you want. Um, so it's really up to you. I think probably 5 to 10
10:11 minutes is probably good, but just remember that amount of time whenever you queue a job, it could take up to that amount of time for it to start,
10:19 right? So, um, if there's no if there's nothing in the queue for it to process, it finishes really quick, right? So, it's like boom, it'll be done if there's
10:27 nothing in the queue. So, it's not like you're going to have any, you know, long-lasting processes on your server.
10:33 It also has logic built in so that it doesn't if you have one that's running extra long. Let's say you you're trying to import hundreds or thousands of
10:41 things. Um it won't allow more than one to run at a time as well. So um there we go. There's a lot of security kind of
10:49 built into that. But yeah, this command the only caveat is um I can't get the path to your PHP um binary on your
10:56 server. So um this most likely does work. Chances are PHP is going to be in the what's called in the path um for
11:03 your server. But um you might need to figure out what the path is if if it's like slashbin/php or something like that.
11:11 It's possible. Um but yeah um so that's the scheduled job that will be r uh scheduled um on your server to run and
11:19 process all those background jobs. Any questions on the import process? Yeah, Joe, if you wanted to get
11:27 from total CMS one to this one, how would you go about doing that if you want to? So, um, all your I haven't
11:35 developed it yet. Yeah. Um, but I do plan on a total CMS one import process.
11:41 Okay. Okay. So, there'll be a way to post. Yes, you'll be able to migrate all of your total CMS one uh, you know,
11:49 everything, text, images, everything all into total CMS3. Okay. Um, and so yeah, this job Q actually will will make that
11:57 process much nicer. Okay, so it'll be able to automate that. It'll be something that happens in the background. Um, and it might take a
12:05 while depending on how big your CMS data is, but it will it will process it all.
12:10 Okay. Um, one caveat I guess to that would be um, if you are abusing blog in total CMS one to be not a blog, right?
12:22 Mhm. If that makes sense. Um, it will import as a blog in total CMSS3. So, if you wanted to utilize the new custom
12:30 collection features in Total CMS3, what I'd recommend you do is um export it as a CSV um and then um import it, you
12:41 know, modify like the the property names in the header names in the CSV file and then import it into a custom collection,
12:48 right? Um that way you'll you'll kind of get all the benefits of a custom collection in total CMS3. But um the
12:56 process right now if you're it won't know if you're trying to use blog as not a blog, right? It's just going to see everything as a blog and it's going to
13:04 import it as a blog in total CMS3. So it'll be apples to apples. Um, so if you want to go ahead and use that as the
13:13 custom collection, you have to then do a little bit of extra work, not too much, um, to get that into to be a custom collection. Does that make sense? Yeah.
13:22 Cool. Um, and I also, uh, will be doing an alloy import process.
13:30 Um, so if you are using Alloy, uh, which was, um, Elixir Graphics blogging system, it actually did a little bit more than blog, which I just learned
13:38 about as researching the import process for it. Um, so yeah, we'll be able to import all of your alloy data into Total
13:46 Cam S3. And lastly, um, I'm going to see how how hard it is. So I got I got
13:53 someone send me a WordPress export, so I will attempt at doing that.
13:59 something I would like to do. Um, but I haven't even had time to to see what's feasible there. Okay. But that that is a goal to also do um WordPress. Okay.
14:10 Um, cool. Any other questions on importing? Nope.
14:17 Okay. Um, let's go to export. Export's pretty basic, right? It's just they're just buttons. You can either export something to a JSON file, export it to
14:26 CSV. Okay. We'll um let's go ahead. I'll export this to JSON and we'll also export it to CSV so we can see what this blog what this data looks like. Okay.
14:38 So let's do a comma. All right. So here is a CSV of my
14:46 uh of this blog. Right now something you should not notice is that um there is some um discrepancies here.
14:58 Uh I I've noticed that actually look like this one I just imported this Dava Day one. It didn't have a date field. So it looks like there's some there's some
15:06 issues with the CSV export. Okay, I'll I'll have to fix that. Um but one thing we'll notice is like things like how how
15:14 do I handle images and files and whatnot um in this export? So if we go to if we see if it's
15:21 a text area, it's it's easy, right? All of the text shows up in there. But for things like um so image what I'm doing
15:30 now and this probably is going to change now um I thought this was a good idea where I basically took all the metadata
15:37 that was for an image like all the XF and everything and I put it in the CSV um as JSON actually because I didn't
15:44 have a better way to do that. Um but yeah, I'm I'm not sure that's going to work out. Um so this is still something
15:52 I'm playing around with. Um, and yeah, that might have to change. I'm not sure what to put in here. Maybe nothing.
15:58 Maybe for image it just has nothing. I don't know. Um, but anyway, everything else, um, at least the textual data is
16:05 all exported. Um, lists like tags and categories are are created as common delimited lists. Um, and so on and so
16:13 forth. Okay, so that's what CSV looks like. Um, JSON um, allows you to actually get everything. Okay. So, if we
16:22 look at this JSON now, I'm using an app that lets me graphically browse the JSON file. The
16:29 actual file looks down here, right? It's just tons of it's a text file, right?
16:34 But, um, this allows me to go ahead and peruse through um, so I can see all of the data. And what's cool here is I can
16:41 actually get all of the image and category data um, you know, as if you know, the all the data that's stored in
16:48 the CMS is all here. Okay, which is pretty exciting. Okay, so all that data is here for every single object. Um, so
16:57 yeah, it's pretty nice, right? So Joe, I have a question. I think this one like you can use it like for like uh if
17:05 you're trying to be like efficient in just changing like uh one uh like for example a property like if you're if
17:15 there's a drop down is it can you use it or no? like like like it's easy to like
17:22 make a like a batch. Uh yes. Yeah. So you could uh you know one one thing you
17:29 could use uh this entire process for is exporting the your data doing a bunch of changes to the data and then you could
17:37 reup re-upload that. Yeah. Because does that make sense? Yeah. Because if if if
17:44 uh you see it if you use the CMS and then you like you edit one just data you
17:52 have to save it and then it takes time but I think if you do it like this it's easier like you just click something and
18:08 stuff like that. So, um, yeah, I mean, I think this makes sense if you're doing a lot of of batch changes, but I if you
18:16 know you only had to change something, um, you know, I would say, you know, using doing that through the the interface is a much better way to handle
18:25 that in my opinion. But yeah, you are correct. You could do that. Yeah, but like for example for me and my
18:32 experience is like if I have like at 500 uh objects to be to edit, I think this
18:38 is it's easier for me to just export import. Sure. Yeah. Like I said, yeah, if you want if you want to batch do all
18:46 that, you could do it that way. Yes. Um because yeah, let's say for example um here, let's take a let's take an even
18:54 simpler example. Let's go into back into this blog. Okay. Um, I'm going to import. Let's go ahead and
19:03 um I'm gonna edit this CSV file really quick. All right. Um, I'm just going to edit the raw text.
19:12 Okay. So, let's find I'm going to find that one with David in it. All right. There it is.
19:18 Perfect. I'm going to delete everything above it, everything below it. All right. So,
19:27 um, yeah, see everything here is kind of funky here. Let's just I'm going to save that and then I'm I'm going to edit this in the, uh, editor
19:40 here. All right. Um, yeah, this is funky because of this stupid thing
19:47 here. I have a different example. Um, what I wanted to show is
19:54 So, this has um let's just go I'm going to delete all that. All right, we have an ID. Okay,
20:04 let's say I wanted to um update the title um of something. Okay. Um, so you don't
20:12 have to supply all all fields of data uh when you when you import especially when you're updating because let's say let's
20:21 say I only wanted to um do um the draft and the title. That's that's the only thing I wanted to update. Okay. So here
20:29 I have three fields. I have the ID. The ID is required. You have to have that because that identifies whi which object we're we're doing, right? Does that make
20:37 sense? And then we have draft which is false and the title which is David. So I'm going to go ahead and make that
20:44 true. And I'm going to I'm going to change the title to be update. Right. So I'm going to save this file. Okay. Or
20:51 close it. And let's go ahead and I'm going to choose this now. And I'm going to go ahead
20:59 and do that one. Now um what since I'm I'm updating existing data, I'm going to go ahead here and click update. Now, I'm
21:07 not going to process this through the queue because it this it really doesn't contain any images and files. So, this should happen really quickly. So, I'm going to say import into collection.
21:17 Okay. And now, if I go ahead and look at that uh
21:24 David, all right, a we'll see the the the title is set to update and the draft is set to true. Right? So you can batch
21:33 update um things um with CSV or JSON as well. You could that's not just with CSV. Um I just I did CSV because I think
21:42 it's it's for a process like this where you're just updating bits of text. Um this could be a really great way to update that. Another great use for this
21:51 is let's say you add a new field, right? and you want to be able to
21:58 um update that field across all your objects in your collection, right? Um so doing that with a CSV file would be
22:06 really easy to do, right? Um so yeah, there we go. Any questions on
22:13 that? Good questions though, Ben. Thank you. Okay. Um so that was export and
22:20 import. Okay. Um if you guys never have played with factory, let's just go through these buttons. or not. Um, if
22:28 you've never played with factory, this allows you to generate fake objects.
22:33 Okay, so most of these things, if you notice, these are like all like Lauram Ipsum stuff. These were all automatically generated um by by the
22:41 factory. Okay, and what's kind of cool is um if you go into your schema, okay, uh or yeah, or let's go into the Yeah, we'll go into the schema.
22:52 Okay. And if you if you go into any of your collections, okay, and you can look at any of these fields, okay, um
22:59 basically this factory setting, this this tells the factory what to generate
23:07 um for this bit of text, right? Or for that field, right? So if we look at blog for example, we can see that blog um it
23:14 generates uh oh that's a boolean. Uh let's go to title, right? So here it it it uses the catchphrase factory for um
23:23 that field. Um for author it uses a name, right? Um so categories it uses tags, right? So it just randomly
23:32 generates this fake data. Okay. For image it generates uh image shapes at 1920 x 1080p, right? Um so yeah, those
23:41 are all the settings on what factory does. And then um sometimes that is so annoying. Okay. Um, so if we go into
23:49 blog now, I can go into factory. Now, if you looked, we had like uh let's see, we have 102 uh items in this blog right
23:56 now. Let's just do factory and let's create 10 more. Okay, I'm going to create 10 more. Say generate new objects. And it's done already. Okay.
24:08 And so now we have 112 objects. What was created? I don't know. I had 112.
24:12 They're all Lauram to me, right? But um it created 10 new ones. Pretty cool, right? Um, so yeah, you you could really
24:20 create some great stuff in there um with the factory and customize and kind of create fake data um for yourself um either just to test the website waiting
24:28 for your client to give you information, right? It's a lot of really cool stuff there. Um okay, next up um so sitemaps.
24:37 We all need site maps to submit to search engines, right?
24:42 And um yeah, so now we have the ability to create a sitemap builder. Okay. Um and so what this does is uh we go ahead
24:49 and define um first we have to give it the property that is a date, right? So
24:57 um hopefully now if you don't have one, you just leave this as the default value. Okay, if your particular object doesn't have a date, okay, but what this
25:06 does is it kind of sets the change date in the site map to be um whatever the date is for that particular object.
25:14 Okay, so in this case, I'm in my blog.
25:17 So the date in the site map is going to is going to match the date field um in uh my blog, right? I can also do updated if I wanted, which probably makes more
25:25 sense, right? So, it's going to use the updated field in each blog post to uh as the modify date um in the site
25:35 map. Now, this is going to be uh unique to each one. So, each one's going to have its own unique date. Now, with ch change
25:43 frequency, this is going to be uh applied to every single object in the in the in the site map that this builds, right? So, um let's say that this one
25:51 this is for a blog. So, let's say it changes once a month. Okay? Um, and then your priority. Now, I've always I did a
25:59 little bit of research like what do we put for priority in a site map, right?
26:03 So, I found this little legend. Um, and I thought that was kind of a nice thing to do, right? So, homepage or highly important pages are a one and then less
26:12 obscure randomly is, you know, an all in between. Standard kind of content and blog posts are 0.5. So, let's go ahead and do that. I'm going to create these
26:19 as a five. And what I'm going to do is I'm going to say generate sitemap. Okay.
26:24 And when you do that, it generates a URL down here. Okay. And let's go ahead and preview that. Actually, I was going to add a little link here so we can just
26:32 click on it. But, um, yeah, I'll do that. Actually, let me make a note to that.
26:40 Um, link to sitemap in builder. Okay, we'll do that. So, there we go. Here's
26:47 our site map for our blog. As you see, it's it's generated the site map for every single blog post. Um it's it's got
26:55 the URL to the blog post. It has the modify date which is the date from the actual blog post. Uh
27:03 the change frequency is monthly and the priority is 0.5. Now again the change frequency and the priority are going to be the same for every single one but uh
27:12 obviously the URL and the last modified date the date here is going to be unique for each one which is pretty
27:20 cool. Okay. Now, um, this is gonna lead any questions on
27:28 that. And now this this Oops. Um, let's go back here. This is the URL that
27:35 you're going to submit to search engines. The one right here. Okay. Copy this. I know it looks funky. It will
27:43 work. Promise you. Okay. So, um, based on all this here, you're going to copy this URL or to SEO helper.
27:52 Or or yes, another one is if you have a sitemap index, right? You in SEO helper, you can paste this into the sitemap
28:08 So, yeah. Um there we go. Any questions on that? Okay. Um now,
28:16 uh I'm going to divert a little bit from working on these little lists here to something that's relevant here. Okay, if
28:23 you notice here, um it we generated the URL, okay, for um a blog post. How do I
28:32 know that URL? Okay. Um, so something that I know, um, maybe
28:39 hasn't been reviewed very often, okay, is if we go into our collection, um, let's go into my blog since we're
28:46 working on blog. Okay, what you'll notice here is that there is a URL setting. Okay, this is very important,
28:54 this setting. Now, now in total C, let's go back to total CMS one. What what is this? Remember in total CMS one, um, now
29:02 only half people did this. the rest of people emailed me. Okay. Um on how to do that is that you preview your blog post
29:09 page, right? And a little light box would pop up and then you had to type in, you know, the URL and you had to save it. Okay. Um this here is that.
29:20 Okay. Um that little thing in preview is isn't a thing anymore um in version 3, but we do have to save this URL
29:28 somewhere. The collection has to know what is the blog post the main blog post
29:35 URL for all the objects inside of this collection. So in this case um it is
29:42 this URL. Okay. Now um this is a nonp prettyity URL right? What do I mean by
29:51 that? Well if we look at this so let's make this a little bit bigger here.
29:54 Okay. If we look at these URLs, we'll see that it is my domain blog post.php question mark id equals and then the the the ID of the blog post.
30:06 Okay, this is equivalent to permal link equals the permal link in version in total CMS one, right? This is what's called a non-p prettyity URL because it
30:15 has this little question mark and an ID equals. What would be nice if we had totalcms.est/blog slash and then none of
30:24 this existed and it just had it in my permal link. Okay, so let's teach you what you need to do to do that.
30:34 Okay. Um so oops that was so now inside if we go into um this utils there is now
30:43 a pretty URL builder.
30:47 Okay. And what we do here is I go ahead and I put in my blog and I'm I'm going to paste in uh I should have copied it.
30:56 Okay. But I'm going to go ahead and let's go back into my collection.
31:01 I'm going to copy this URL. We're going to go into the URL builder. Okay. I'm going to paste this in. I'm going to say
31:09 it's for my blog collection. I'm going to say generate server rules. Voila.
31:14 Okay. So, oh, I have a little bug in here. Okay.
31:22 Um, so here what we'll notice is a it gives us the Well, it will there's a little I I duplicate something in here.
31:31 That is what I should save to my collection. So, it says save this URL to your blog collection. Okay. So, I'm going to click on I'm going to copy
31:40 that. Okay. Now also what it does is it creates the rules that we need to paste into our Apache HT access
31:48 file. Okay. And that the these rules are customized for your exact
31:55 setup. Okay. So um now that I let's pretend I copied and pasted that into my H ht access file. Let's go back to my
32:03 collection and I'm going to paste that URL that it gave me. Okay. Now, um, the collection doesn't know that this is a
32:11 pretty URL. Okay. So, what I'm going to do is I'm going to say, hey, this URL is now a pretty URL. I've configured I've
32:18 configured my htaxis file. Um, I've done all that work. So, now I want to save this as a pretty URL. So, let's go ahead
32:25 and save that. Okay. So now if we go back to my
32:32 sitemap builder. Okay. Um let's just set this up
32:39 again. So we're going to do updated uh monthly uh 0.5 generate. Okay. Actually I didn't
32:47 even need to do that. I could just refresh this page here. So I'm going to refresh this page. Now if we notice here the URLs have
32:58 changed. They're they're now using the pretty URLs because the collection knew um how
33:05 to build that pretty URL. Okay. Now, where else is this applicable? Okay.
33:15 Um we're going to dive into I'm going to open up this project file. Okay.
33:29 Sorry, I should have had this open beforehand. Okay, if we go into a loop.
33:42 Okay, uh let's find this uh here. The object link stack. Okay, the object link stack allows you to
33:51 um pretty much link to an object. Okay, now um when I created this this demo
33:59 project, I didn't have a um I didn't have all of that stuff configured, right? So, I was using this
34:06 add custom link. Okay, but now um now that if you have your if you have your collection properly configured with a URL, you don't need to use custom link.
34:16 Okay? Because the the CMS already knows the URL and how to link to it. And what's what's great is all you all you
34:24 have to do is add this object link in the stat into the onto the page, configure what the ID and the the collection is, and you're done. Okay.
34:32 Now, you can you can configure whether or not it opens in a new tab or a new window and whatnot and whatnot. But yeah, the link itself, you shouldn't be
34:40 using add custom link. Okay. um it because this is going to link to this particular
34:47 URL. Okay, so it it already knows how to link to it. And if you have pretty URLs configured, it's going to link to the pretty URL
34:56 automatically. Okay, and if you don't have pretty URLs configured, it's going to it's going to configure it's going to go to the non-p prettyity URL link,
35:04 right? Um so anyway, any questions on that?
35:10 I know I haven't reviewed that the whole URL linking thing um too much in the past. So, um it's nice that we have the
35:17 ability to do that now with pretty URLs as well. Does that make sense, Ben? I know that you were you were playing around with that yesterday. Yeah, I must
35:26 try that already. Oh, excellent. For two days. Cool. Excellent. Excellent.
35:32 Okay. Oh, just the just the folder. Did I Did you read the the the
35:38 the one in my post? It's like uh I haven't looked at it today. No, but it's okay. Uh I just remove it and I I'm just waiting for it. It's easier.
35:50 Perfect.
35:52 Okay. Um next up, so let's go back to our blog since that's currently what we're looking at is so we've done
35:59 factory, we've done sitemap, now we have feeds. Okay. Um, so yeah, generating an RSS feed is another is another big one, especially for blogs.
36:10 Okay. And um I have to say out of the box um it will generate an RS a proper
36:16 RSS feed for any blog uh in total CMS, right? So this actually this URL down at the bottom, it'll work 100%. Right? So
36:25 if we go just go ahead and open that in a browser window, there is my huge RSS feed.
36:33 Okay. Now, um obviously in total CMS, you can create a custom collection, right? And
36:41 there there's some optional things. So, there's these settings up here. If I go ahead and say, you know, my blog, basically give it a name, and that kind
36:48 of shows up in like an RSS readers. You can kind of give it what you what that feed name is, right? So, you probably be like, you know, Joe's blog or something
36:56 like that. Okay? You can choose the language, right? So, for me, it would be English. Um, you'd put a link to your
37:03 website, right? So, I could be like um, right? So, link to Weaver Space.
37:11 What is um, if you wanted to have like an a main image like a you know, some sort of promo promo image for your feed,
37:18 you could do that. Um, I'm not going to do that right now, but you could just put in a URL um to any image. This and this can be an image saved in total CMS,
37:27 right? So, um, here, let's go open this in a new tab. Like, let's say I wanted to have this image. Okay, if I go into
37:36 here, I let's say I wanted to use this as my promo image, right? And you can configure the size and what whatnot. Um,
37:43 let's just copy this link. Okay. And we're going to go back into here. I'm gonna paste that into there. So, that is now um the image for my RSS, right?
37:54 Which is this one right here. Okay. So there's that. Um you can type in here.
37:59 I'll just put in some Lauram Ipsum text for my feed description. Right now here is where um we
38:08 map your collection or your object properties to the RSS feed, right?
38:15 Because um now what we see here is the placeholders are the default values.
38:19 Okay? And they're mapped for a blog, right? But let's say uh you know I wanted to use um you know created as the
38:28 date field. We could do that. Okay. Or and let's say uh in in my object instead of media I have video or something like
38:35 that. Instead of draft I want um draft is anything that is set to be a draft field will be hidden from the RSS feed.
38:44 Right? So maybe I have archived or something like that. Maybe title is name, I don't know, right? Um, and this is instead of summary, it's content.
38:53 Okay. Um, and uh, author is uh, that's that's probably going to be name. So, we'll do name. And this is and we'll
39:02 leave that as title. Right. So, there we go. So, now I've created this um, and if you click generate RSS feed um, for this
39:09 particular um, setup, this is going to be your RSS feed. Okay. And you could add this into
39:18 SEO helper has an RSS metadata um stack um that you can then or you can you know put this as a URL in a button on your
39:26 page. All kinds of stuff, right? So um this is going to be the URL here. This actually isn't going to work for my cuz I don't I typed in gibberish fields that
39:35 don't exist. Okay. Um yeah, we'll generate this now. And let's go ahead and copy that. And let's look at that in
39:44 a browser window. And what we'll see here is I have my the same RSS feed, but up here I have like um you know titles,
39:52 Joe's blog, um when the build date was, there's my homepage. Uh here's the language. Here's the uh URL to the
40:01 image, right? Oh, no, that's not the image. That's the Oh, that's the URL to the RSS feed itself. Okay. Um and then
40:08 here is the image, right, for my uh RSS feed, right? Um, here's the description
40:15 for my RSS feed. And then below that are all the blog posts. Okay. And if you notice here
40:24 again, the blog posts used because I have pretty URLs configured. It knows and dynamically generates these as
40:31 pretty URLs. Pretty cool, right? Actually, I just noticed is
40:40 permal link is false. I should probably set that to be true.
40:45 Let me let me make a note of
40:57 that. All right. Any questions on RSS
41:07 feeds? Cool. Okay.
41:17 Um, next up, a few other things um that we have that are new. Um, if we go into edit collection. Okay. Uh, we already saw that there's these two new fields.
41:26 Uh, well, URL was there already, but we have a pretty URL field. Okay. There's another thing here. Um, there is now a
41:33 sort uh field. Okay. And this allows us to define the field that is sorted by.
41:40 Okay, so let's say I wanted to sort by date. Okay, let's go ahead and save
41:46 that. We go into my blog now. Uh let's go into the blog. Okay. Um we'll see that uh these
41:55 posts are now sorted by date. Okay. Um now if you notice they
42:03 are ascending order. You can also reverse the sort as well. So let's save that. Go back into my blog. And now
42:11 they're reverse sorted. Okay. So you could define and that sorting is only what what you see
42:19 in the admin dashboard essentially, right? So um yeah, it gives you a default field to sort by when you're
42:26 viewing your collection in the admin area.
42:33 Any questions on that?
42:36 No. Okay. So, presumably when you show it on a on a screen, you can sort it again into any order you like. Yes.
42:42 Yeah. So, I if I click on the title field, it'll you know, it'll sort by that particular field. So, yeah, that is only the default uh sort. And you also have filter, right?
42:53 So we can, you know, as you saw earlier, I can just type and it dynamically filters to be what I want to help me quickly find
43:02 something. Okay. Um, soon I I haven't this hasn't you'll also notice there's this little uh this first column has
43:09 some three dots in there. Um, I haven't implemented this yet, but the next thing I'm going to do is have a little button here. So you could do some quick
43:18 actions. Uh, such as I, let's say I wanted to delete this, I could delete it. Um, and another big thing is cloning. So, let's say I wanted to create a copy of this particular object.
43:29 Um, we'll have the ability to do that from this little action button. Okay. And I'm open to any other sort of actions that you might want.
43:39 Okay. Uh, at least for right now, um, it will be, um, a single action. Um,
43:46 eventually I I'd like to create an interface that will have multi. So, if you wanted, you know, to delete multiple things, you could. Okay. But for right now, it'll be a single action.
43:58 It'd be nice if there was a way to automatically delete all of the factory content that you created.
44:09 Um, well, um, so I what I would say there is you could just delete the whole collection. Yeah, I guess that actually makes sense.
44:18 Yeah. I mean, yeah, you just delete the collection and then you I mean it's it's applying to this the all the work is in
44:26 the schema, right? So deleting the collection or creating a new collection based on the the same schema, it's no big deal. Yeah, actually that wouldn't
44:33 cause any trouble. Oh, okay. Okay, that makes sense. Yep.
44:41 Um now, uh I actually do make it while you can delete a collection here.
44:47 Um, here I'll show you. I'm going to go ahead and delete this. My blog collection is gone. Okay.
44:56 Um, that that seemed like a very dangerous thing I just did, right? Like
45:03 that could be like detrimental. Okay. Um, so, uh, when you delete a collection from the UI like
45:11 that, um, you actually don't lose any data. Okay. I'm going to go ahead and create my blog collection again. Oh,
45:18 look at that. I have a a bug. That's interesting. Oh. Well,
45:28 shoot. All right. I'll have to look at that.
45:34 Um, all right. Well, we'll just show you. All right. So, if we go into uh my data here, go into blog. Okay.
45:45 Everything is still there. Okay. Um so yeah, everything is there. Um it's just
45:52 it's kind of set to be not there. Okay. In the UI basically.
45:58 Um what you could do is obviously I I have broken that. Um if you were just to create that blog collection again. Oh,
46:07 it looks like it didn't even get deleted. Maybe that is a bug as well.
46:11 I'll have to look at that cuz it it's still right here.
46:15 Interesting. Uh, delete. And it is gone from here. But
46:21 once I refresh the page, oh, now it is gone. Okay. Yeah, that's what I thought.
46:32 Now, if I go ahead and say new collection. Oh, interesting.
46:45 Now it's not there. Uh here I'll recreate it in a in a different way. Um if you're completely new for Total CMS, if you go to project setup and set up
46:54 default collections, this will like set up all the default collections out of the box for you. Um blog is one of those. So I can just go and go ahead and
47:01 say create that. So now if we go into collections, it's right here and all my data is still there. Okay. So, um, if
47:08 you delete a collection, it deletes it basically deletes it from the UI, but you still have all the collect all the data there, which is, I think, useful.
47:16 Okay. Um, yeah, that bugs me. I hate that. Oh well, I'll have to fix that. Um, okay, let's see. Next up, uh,
47:26 what's next on the list? RSS collection view sort pretty hey I think I think that's
47:33 everything I've done so far in um for this next beta um I don't have an ETA uh I guess a couple other things I I have
47:41 uh there is a little bit more documentation um I've done let's see importing data exporting oh there's no
47:48 docs on exporting there's a few other things that I did I documented some other things in
47:54 here I forget what But uh oh, I I did there was there were some missing uh
48:01 twig filters, I think. Uh filters. There were some missing twig functions. Oh, yeah. All these um I built a little
48:10 embed function. Um so if you just wanted to embed like a YouTube video or something like that or a video, you can just pass it a URL and it'll
48:18 automatically build out like the the player for that, which is nice. Okay.
48:26 Um yeah, let's see. And then inside here we have the only thing left in here to
48:34 do is the image batcher um which will give us the ability to um batch images.
48:42 And um now that I have that job cuer um that'll probably utilize the job queue actually um so you can batch create
48:49 certain resolutions of images um nicely, right?
48:57 Any other uh questions maybe in the future Joe like uh dup uh
49:05 what do you call duplicate of uh collection like for example you're doing just same stuff and then you're just
49:12 going to add something from one field like you you want to duplicate an entire collection. No just the you know like if
49:21 object oh uh yeah duplicate. Yeah. Um, yeah, that's what that's what those little three dots were going to be. So, well, I'm going to call it clone, but yeah,
49:30 same thing as duplicate. Maybe I should call it duplicate because that's probably what people will want. People are going to
49:38 see clone and they realize, well, I want duplicate. Well, yeah. Okay. Um, so yeah, uh, yes, there will be a, um, I I hope to have that in this in this next
49:46 release. I actually have all the APIs for it done. I just need to build the UI for it.
49:55 Basically what it'll it'll be clone is probably like duplicate.
50:01 I'm sorry. Say that again Josh. I was going to say clone is more of like a git kind of Yeah. It's a it's the coder thing. Well, I agree with clone. I can
50:09 understand where duplicate is probably a better way of putting it. Um so yeah uh basically what'll happen is you you so you click duplicate and um it'll prompt
50:18 you for um what you want the new ID to be. Okay. Um and then so you you'll
50:26 you'll provide what the the new ID is for the duplicated object. Um and then uh once you hit save then it'll it'll do
50:34 it'll duplicate it all. Right. Oh, I just forgot. I uh I forgot to mention actually one big thing.
50:42 Um okay inside collections uh edit collection. Okay. Uh there there
50:50 is another checkbox that's new. Uh this rebuild in uh Q rebuild index on save.
50:56 Okay. So what is that?
51:09 talk we're talking and this is very dependent on your server and all kinds of other variables. Okay, but um
51:16 whenever you uh save anything, okay, so I'm going to go ahead and say I'm going to save this. Okay, uh let's go ahead and save.
51:26 Okay. Um, what that does, actually another thing I did is that little animation. Um, there's some
51:33 intentional delays there. Um, just so you always see that particular animation. It's now faster. Um, I actually cut it in half so that it doesn't take quite as long.
51:43 Um and uh but anyway, so when you save an object, yes, it saves this this uh
51:50 object or updates the object, but another thing that it does is it rebuilds the entire index. Okay. Now, it does that to make
51:59 sure that um this you know the data here and the data that you're using in your loop stacks are always up to date.
52:08 Now, however, let's say you have, you know, 20,000 objects here, okay? Um, it
52:15 could add, again, it depends on your server and how much data there is and all kinds of other variables, but that
52:21 save could take a extra few seconds. Um, for Bill Burton, if he's here, it was
52:28 taking up to maybe 10 seconds. I think Dr. Bob was having this as well. um he had he had a collection
52:35 with uh you know I think tens of thousands of things in it already and it was taking I think 10 to 15 seconds to
52:42 save. So um and a lot of that delay has to do with having to rebuild the index every single
52:50 time. So what you can do is if you go in ahead in here and say and check this and save it. What what that's going to do is
52:57 whenever you save an object it's not going to immediately save the uh rebuild the index. it's going to add that job to the background queue. So, it will save
53:06 the object. Um, but the that means the index could be slightly out of sync until the background job runs.
53:14 Oh, that's the reason why I I I told you about, you know, it's easier to do an import and export because of every time
53:24 I save like it took me like a few seconds. Yes. So, yeah. So, this this will be better for you. Okay. Um, now
53:34 now also what you could do is um let's say for example um or let's go
53:41 back. Um when when I have it set to Q, okay, I can go ahead and make tons of of
53:48 edits much much faster now. And then you can always manually just go here and say rebuild
53:55 index. Okay, so there we go. Now, um, yeah, it'll still have that that pro in
54:03 the background. It'll still have that thing in the queue. Um, manually rebuilding the index doesn't remove the job from the queue. Maybe it could, but
54:11 it's no big deal. Um, rebuilding the index isn't isn't a horrible job, right?
54:16 I mean, rebuilding it every now and then is fine. Um, you know, so yeah, but if you if you ever wanted to manually trigger it, you can always trigger it
54:23 from right here. And you just click on that. And there, my collection of 112 items. It just got rebuilt, right? So,
54:30 pretty quick. Okay. Um, good thing I remembered about that one. That was that was an
54:38 important one. So, yeah, I think CMS3 is shaping
54:45 up. Um, did I miss it? Did you talk export? Yes. Okay, I missed it. Sorry.
54:55 Um, let's see. I I'm going to make sure that this next beta works with the next
55:02 beta of stacks 6. So you can actually preview u and use total CMS3 inside stack 6. Right now that's not possible.
55:11 It requires an update from the stack 6 side and an update for me I think. So um hopefully um this this next beta of
55:19 total CMS 3 will work with the next beta. Um, no ETI on when that will be released, but it should work with the
55:26 next beta of stack 6. Okay. Um, I talked about we're going to have duplicate. Uh,
55:33 we'll have the ability to duplicate an object. Um, let's see. Uh, um, and just a few other minor bugs.
55:45 Um, yeah, that's it. I I may Josh, I'll let you know because I know you're kind I think you want this.
55:53 I a lot of times when I'm strategizing with people um there's this field I plan on adding called the deck and um I'm
56:02 going to do some investigation to see if I can get it in before the official launch. Um um because I I think it will
56:12 be a good field to have. Um, so any of the any of you guys that know what the deck is, um, yeah, it uh, it might come
56:20 before launch. I was originally going to be after launch, but I I I think it's it's it's going to be a nice a nice feature to have. It's kind of like
56:28 having many objects inside of your object, basically. Okay. Any other questions?
56:38 Any generic questions about total CMS3 that I can I'm happy to answer, stay on as long as we want to. uh chitchat and help you guys out about the pretty URL.
56:48 Uh would it be compatible if you use like a router too?
56:53 If you use a router too, what do you router.php like if you want to like a like a if you put a slug in a
57:03 in your collection and then you do a route like uh what do you call that like comics one and then just a another
57:12 folder and then so there's no more like uh like htmlphp.
57:20 Yes. Yeah, that's exactly how I showed it. Uh with the blog I use post.php. Uh you don't have to name it post. If you
57:27 want to name yours router.php, that's okay. Um yeah. Yep. Uh it will work. So it'll remove that that uh web page name.
57:38 Oh, I'm talking about the the router dynamic when doing a dynamic page like
57:44 router.php and then the view.php PHP and then it's dynamically
57:52 like remove everything like just just a folder type and you use a like a slug in
57:59 the like series underscore slug something like that and then so when you
58:05 choose like one object it removes the the extension
58:16 I'm not. So are you're doing that through hand coding or how are you doing that? Just uh just doing inserting it by
58:24 hand coding only. Uh I hand can can you show me what it's
58:32 doing? Just just show share your browser and show me what it's what it does.
59:22 It's okay, Jo. I'll pass because I can't open my stuff right now. Okay. Okay. Um,
59:29 yeah. I I I'd have to see kind of what you're doing. Um, not sure why you would need your own custom routing thing. Why Why not just use what's baked into the
59:38 web server already? Oh, yeah. Uh, it's uh I I use it because like it's when I still don't have the pretty URL. I'm
59:46 just trying to learn the system. Oh, okay. Okay, cool. Well, m maybe maybe you could stop using that and just use the pretty URL because it already does
59:54 that. Yeah. Yeah. Yeah. Exa it's exactly what it does.
60:02 Joe, I have a question about um um connecting collections.
60:10 Okay.
60:11 Uh we we talked about it uh in the U community about a month ago. Yep. And I
60:19 finally got uh back to the pro project again. So I'm still uh working on these
60:26 uh master detail uh stuff and linking um to collections basically sections and questions.
60:38 So to one section multiple questions belong to that. Okay. Yeah. How do I set it up?
60:49 I sure. Okay. So um let's pick something that has uh a
60:56 lot. So let's say uh blog. Okay. So I have a blog that has tons of of things.
61:01 And let's say I want to um here I have this custom collection that I have no clue what it is. But let's say I wanted
61:07 to I wanted to relate um one of these to one of these.
61:13 Yeah. Okay. Okay. So, let's let's do that. So, uh I'm going to go into my custom collection. Okay. And I'm going
61:21 to create um I'll create this. I'll I'll name it blog. Okay.
61:27 And actually before we do that, I'm going to go into the docs and then go into the field settings. And we want
61:35 uh actually you know field settings uh oh there relational options. So I'm going to go ahead and copy this snippet
61:42 right here. Yep. Okay. And we're going to go into my schema and my custom schema and I'm going to add a new field
61:49 called blog. Okay. I want this to be a type of string. Uh the form it's going to be a select box. I want it to be a
61:58 select box. Okay. And then um the settings I'm going to do relational options. The collection is blog. Um the value is going to be ID.
62:08 Most of the time your value is going to be ID. And the label is title which is the title of the blog post. Okay. So one
62:15 step back. Uh sure. What you it went a little bit too fast on the screen. Sorry. I'm sorry.
62:23 So I I create So I'm in my custom uh my I have a custom schema, right? Which is just um and I want to relate one this object to a blog object.
62:35 Yeah. Make sense? Yeah. Yeah. Yeah.
62:37 Okay. So um and and I'm doing that through so I created a field and the only purpose of this field is to relate
62:44 to a blog post. Yeah. So that's u the foreign key. That's exact. Exactly. Yes.
62:51 Okay. Right. So, um, so now, uh, and then in here, I want it to be a drop down. So, I can just select, right?
62:58 Okay. And then, and then this special settings is going to basically, um, we'll see it. Okay. The these these this
63:07 builds the relationship for us. Yeah, I just I just missed the form info. Which one? Uh, uh, yeah. So, the property it's
63:15 we're saving it as a string. And then in form info, I set the field to be a select box. You can you can set all kinds of stuff, but I want it to be a
63:23 select box. Ah, okay. I think that that's the mistake that I made. I I I picked one from the array list. Ah,
63:31 okay. Um, now you could if you wanted like if you wanted to do you could do a
63:40 because I selected slug and uh I um Oh, yeah. Slug. That would be like an ID
63:47 field. Yeah. Yeah. Yeah. Okay. Um, actually, uh, so what you could what you could do is you could do a list if you
63:56 wanted a multi- relationship. And then here instead of select, you could actually do a multi-
64:04 select. That would allow you to have a one to many relationship. Okay.
64:11 Okay. Uh, we'll keep it simple. I'm going to go back to uh just a string and the select. But we can look at the multi select in a little bit, but let's just
64:19 do that. Okay. So, let's go ahead and save that. And let's go into my custom collection.
64:27 Now, if I look at one of these, I can now have um these are all my blog posts.
64:34 So, I can do that. And now, now this particular object is associate is linked to that blog object. Okay. Easy peasy.
64:43 All right. Here. Now, now for fun here, let's show you how to do what what the multi select would look like, right? So, if we go into custom, let's change this
64:52 to be um a list. Okay? And um it's going to be a multi select
64:59 field. We're going to save save. Now, now when I go into uh my
65:07 custom collection, I now have a multi select box that I can select multiple things. Cool.
65:20 All right. You can also do um if you don't if you don't like the multi select interface. It's I I don't care for that. It's not my favorite
65:29 field. Okay. But um you could also use the
65:37 um this list field. Now one one thing I tried to do here is I tried to break up the form fields into what type of data
65:46 that field kind of supports right so if you see here where I have list array fields we have two fields available to
65:53 us list and multi select let's look at what the list option does
66:02 right so now I have this this tag box that I can then create basically it's like a tag interface right and And I can even start typing here. I could be like,
66:11 you know, um there David and click on that. Right? So now now it's giving me this this kind of a different unique
66:19 interface to doing a one to many relationship.
66:25 Yeah. Okay. So how do you use it, Joe, if you have a relational?
66:33 Well, then at that point like uh when you're when you're looping through your data um you know you have access to then
66:41 that particular object ID. Um David if you guys uh were at the conference he kind of went a lot into that. Uh I'd
66:49 recommend watching that video um you know if if you have access to that uh from the summit last month. Um but yeah,
66:57 so at that point you would then um it when you're in a loop uh you would then access that idea and then uh you would then you know load that particular
67:05 object inside of the loop and then you can do all kinds of stuff. So um yeah um I'd have to have kind it's kind of
67:13 something I'd need a real life scenario to build out. It would take me too long to kind of build out that example for right now.
67:20 Um, yeah, this will building that relationship makes sense. I'm sorry. Say it again.
67:28 This will get me going. So, thank you. Excellent. No problem. Perfect. It's like the compass, Joe.
67:36 It's like the compass stack of yours like where you like you can remember the
67:45 one that I showed you like when you're looking at a blog and then on the left next or back there's an extra next next
67:53 blog that you can read. Yes, you can use it for for there.
67:58 Um that seems like something like because this is a very manual thing where you'd man you could I guess if you wanted you could manually define the
68:06 next and previous. Mhm. That seems that seems like a lot of work. That seems like a lot of work. That's something that you'd want to automate but based on
68:15 sorting from a date or something like that which which is where where compass comes into into compasses when you update it.
68:25 Yeah. Yeah.
68:28 So, so yeah, trying to manage that into manually that seems like a nightmare, especially with the number of objects that you have in your Yeah, that wouldn't be good. I'm thinking of the of
68:37 the compass stack. Yeah. Yep. Yeah, compass is a better solution. So, Joe, let me I just need clarification on
68:46 something now. Now, in my system, okay, you know, I've got the one collection that's got a a person's name and an ID for that person. All right? And then
68:54 I've got a separate collection for the attendance. So right now I have it set up so that when I'm adding data to the
69:01 attendance collection, I click on the ID field and it shows me not only the ID but the person's name and puts in the
69:09 ID, but I'm also collecting that person's name. So are you saying that I can re that we can relate that name
69:17 field back where that name would automatically get filled in based on what I choose in the Okay. Well, that's what I've been wanting to do. Oh, okay.
69:26 I wasn't sure how to how to how to actually accomplish that. So, maybe on Friday we can look at that. So, that Yeah, that's exactly how I mean. So, yeah, in your in your attendance list,
69:34 you would just uh you know, import the the your list of users and then Well, I've already got everybody I mean, everybody's already in there, you know,
69:43 and stuff. I mean, so, so, so when I'm in the collection to enter the data now, with the import function, I'll be able,
69:52 this will just wipe this out. I mean, because I'll just import the damn CSV file from now on. Yeah. But but for
69:59 right now manually um uh when I'm in the attendance collection adding a new record uh a new
70:09 object I just click on the ID field put the ID in but then I have to click on that name field to put the name in and
70:16 obviously I could make a mistake and choose the wrong name. So I want to relate and say give me the name into
70:26 that field that from this ID I just selected. Yeah. Because it's pulling from the same same place from the from the member. Exactly. Yeah. You don't
70:34 want to have duplicate data. Yeah. You want to pull it. Yeah. All right. That way you can if I don't know if a woman gets married and changes her last name, you know, or something like that, then
70:41 Yeah. Well, yeah. Well, okay. Did we did we bring up the fact that if you forget to put the ID in, there is no error message when you hit save.
70:54 When you create a new object, there's no error message that pops up if you forget to put in an ID. So, you're just sitting there going, "Why is it saving? Why is it not saving?" Oh, really? Yeah.
71:03 I don't even notice it. Oops. Okie dokie.
71:11 I thought when the thing was was a required field, it would just flag
71:17 it. H I can't do that. All right. So, uh I mean I I just
71:25 choose an SVG uh one, but here let's here let's go into or something like text on text new
71:36 object doesn't let me save. And you're doing that in the admin dashboard.
71:50 My command S doesn't doesn't let me save either.
71:54 Yeah, it's in the admin dashboard. So when you're creating a new object, it just you don't get any error message when you're trying to save.
72:20 It's not letting me save. Yeah, if I can trigger it. Uh, if I can replicate it, I can fix it.
72:36 Yeah, cuz like, you know, if you have other fields, you have help text or something and it's required, you get an error message. But with the ID field, for no reason, there's nothing. So if
72:44 you forget to fill it out because when you go into that form, the ID fields like that light gray. So you kind of skip over it and you're looking at all the regular fields and you get to the
72:53 bottom. Well, I mean that's why I'd recommend if you have an ID field, create configure the autogen so that it auto it automatically gets generated
73:04 Yeah. So I that's probably my fault then just by a new one that I've never but it's a good option, you know.
73:13 It's a good thing to see it happen, right? That Okay. Well, if that now you know. Uh well, I Yeah. I mean, if you can show me how it make it happen cuz I
73:22 I couldn't make it happen. But um that's what I'm saying right there. But that's the thing. When you went to save, nothing happened. That was the point.
73:27 Oh, because Oh, so okay. I thought you said I thought you meant allowed you to save. No, no, no. Go in. So, go into a
73:35 go into your custom collection. Go in. I I understand what you mean. So there there is no um there's no feedback on
73:43 why it's not doing anything. Correct. So fill in every field but the ID and the ID blank and now I understand. Okay.
73:50 Yeah. So there is no help text if ID is blank. Got it.
73:58 Which is a pain in the butt. Okay. Yeah.
74:05 Got it. Okay. Perfect. Um I can agree with that. Okay. So, um, let me show you how to do the, uh, um, the autogen,
74:13 right? Go to the docs, go to form settings. Um, so here's an auto the docs for the autogen field. Okay. Um,
74:20 currently, this only works on the ID field. Um, in the future, I I think it would be cool to have this um, in other
74:28 fields as well. Okay. Um, and essentially what you do is you do autogen and then you can you type out a
74:36 string in here. Okay. And uh this is a very this is a special syntax where um you do a dollar inside curly braces and
74:44 then the property that will get injected. Okay. Now there are there are a few special autogen variables. Now
74:53 will give you the current um uh date um the time stamp and UU ID. You can use as many or as little of these as you want.
75:03 You can also do multiple um um properties. So if you want to have
75:10 you know uh the title and you know something else right you could do dash blah blah blah blah blah blah. You can make it the ID as big as you want. Okay.
75:18 So for example here let's just go in here um or we'll use this custom collection that I have. Okay. So I have
75:26 um I have a Chris field and a test field. Okay. Let's just go into here.
75:33 And I'm going to go into my settings, paste that in. So I have Actually, question for you. Can you before you go into that, can you cancel
75:41 out for a sec? Go to the ID field. Can you edit the help text on the ID field? Um, yeah.
75:50 Yeah. Okay. So, so, okay. So, you already do have data. It just doesn't trigger. Okay. So, I thought it was blank and maybe that's why it was not
75:58 triggering. So, it isn't blank. Yeah. So that's why I was just curious if it was blank. Makes sense. Um all right. So uh
76:06 so we could do uh Chris test and here let's do like uh I don't know UU ID. So you can kind you can see how do you ID.
76:16 Okay. So this is going to be what my uh permal link looks like from now on. Right. Say save.
76:25 He just came back.
76:30 Okay. So, um, so now let's go ahead and if I do, uh, there option. Well, apparently that's the Chris field. I don't have any labels in these. I don't
76:38 know why I don't have that, but whatever. Um, here. Hold on one second. Is that Oh, I don't have
76:46 anything. Oh, let's delete that. I don't think that matters.
76:51 Yeah, I was lazy when I set up this custom collection and I don't have any sort of uh uh form field. I don't have anything in here. Let's do let's do
76:59 Chris so I know what the hell the Chris field is and test so I know what the hell the test field
77:13 is. All right. So Chris is this one. Test is hello.
77:22 Oops, that's weird. Oh, it's a number field. Okay. Uh, right. Right. Um Oh,
77:30 that's interesting. Did I not not sure what I
77:40 did there? Did I do a little typo?
77:45 H second. Let's go back into this. Oh, wait.
77:54 What? Oh, wrong collection. Oh, was I doing that in the
78:01 wrong the heck? Uh, Chris test UU ID.
78:15 That looks correct. Custom collection. That's based on the Yeah, custom collection.
78:33 Okay. Not sure why test isn't going in there. I'll look into that. This one sh This one adjusts properly.
78:43 H interesting. I'm going to change test to be a text box. Let's see what Let's see what that does. That's actually what I wanted to
78:51 do. Test. It should be a string and should be a uh text box.
79:09 Safe here. Custom collection. New
79:16 collection. Okay, there we go. That works. So, as you see, it's basing it off of this field, this field, and then
79:25 it's adding a unique identifier at the end. Okay. Now, just like in total CMS1, while this field doesn't look editable,
79:34 it is. Okay, I do that on purpose because I it you might not want people to realize things are editable, but you can click in here and then start typing.
79:49 Okay. Now, once you type into it, doesn't matter what I change in here, you've now broken the it stopped
79:56 autogening because I've man I' I've showed intent that I want to I want to manually modify this title. So now it
80:04 doesn't matter what I put in here at all. That autogen field is it's locked down because I manually typed into this field.
80:14 And if I save this, this is going to be the ID. make sense.
80:20 Yeah, that makes sense.
80:27 There we go. So, yeah, set up an autogen uh and uh yeah, you know, another thing could be interesting is like some sort of
80:35 incrementer. Not sure exactly how I could implement that, but something that's like, you know, like you in your example
80:44 you were showing me yesterday, it was like you had slide one, slide two, slide three. Like, you know, if you already had a slide two, it would be nice to be
80:52 able to have the next the next counter is a three, right? Um, yeah. No, the purpose of that was to be able to hopefully
81:01 um I haven't gotten to this far yet, but would be hopefully be being able to then um sort by that
81:10 ID so that if I said slide one, then slide one would be slide one so that I could like screw around with them. But I
81:18 mean, you could also do sort orders and then custom field now too and everything. So there's a whole bunch of other Yeah. things you could do. Yep.
81:25 But I just wanted to I was just fooling around. I didn't even get into the autogen. I hadn't even gotten that far.
81:31 As you know, I've only started getting my nose wet in the last week here. So, yeah.
81:36 Sweet. Any other questions on the autogen or anything else, guys?
81:47 None. All right, cool. I guess we'll we'll call it a day. All right. I got I found found me some new bugs to fix this afternoon.
82:01 Thank you, Joe. Thank you guys. You have a great day. All right. You take care.