mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Removed internal/outdated/speculative docs from requirements.md
This commit is contained in:
parent
2787d360c1
commit
ea0cedb3da
@ -124,63 +124,5 @@ In your controller's init() function, add:
|
|||||||
:::php
|
:::php
|
||||||
Requirements::set_write_js_to_body(false);
|
Requirements::set_write_js_to_body(false);
|
||||||
|
|
||||||
|
|
||||||
## CMS Requirements
|
|
||||||
|
|
||||||
The SilverStripe core includes a lot of Requirements by itself. Most of these are collated in `[api:LeftAndMain]` first.
|
|
||||||
|
|
||||||
## Motivation
|
|
||||||
|
|
||||||
Every page requested is made up of a number of parts, and many of those parts require their own CSS or JavaScript.
|
|
||||||
Rather than force the developer to put all of those requests into the template, or the header function, you can
|
|
||||||
reference required files anywhere in your application.
|
|
||||||
|
|
||||||
This lets you create very modular units of PHP+JavaScript+CSS, which a powerful concept but must be managed carefully.
|
|
||||||
|
|
||||||
## Managing Generic CSS styling
|
|
||||||
|
|
||||||
One of the aims of this is to create units of functionality that can be reasonably easily deployed as-is, while still
|
|
||||||
giving developers the option to customise them. The logical solution to this is to create 'generic' CSS to be applied
|
|
||||||
to these things. However, we must take great care to keep the CSS selectors very nonspecific. This precludes us from
|
|
||||||
adding any CSS that would "override customisations" in the form - for example, resetting the width of a field where 100%
|
|
||||||
width isn't appropriate.
|
|
||||||
|
|
||||||
Another solution would be to include some "generic CSS" for form elements at the very high level, so that fixed widths
|
|
||||||
on forms were applied to the generic form, and could therefore be overridden by a field's generic stylesheet. Similar
|
|
||||||
to this is mandating the use of "form div.field input" to style form input tags, whether it's a generic form or a custom
|
|
||||||
one.
|
|
||||||
|
|
||||||
Perhaps we could make use of a Requirements::disallowCSS() function, with which we could prevent the standard CSS from
|
|
||||||
being included in situations where it caused problems. But the complexity could potentially balloon, and really, it's a
|
|
||||||
bit of an admission of defeat - we shouldn't need to have to do this if our generic CSS was well-designed.
|
|
||||||
|
|
||||||
|
|
||||||
## Ideas/Problems
|
|
||||||
|
|
||||||
### Ajax
|
|
||||||
|
|
||||||
The whole "include it when you need it" thing shows some weaknesses in areas such as the CMS, where Ajax is used to load
|
|
||||||
in large pieces of the application, which potentially require more CSS and JavaScript to be included. At this stage,
|
|
||||||
the only workaround is to ensure that everything you might need is included on the first page-load.
|
|
||||||
|
|
||||||
One idea is to mention the CSS and JavaScript which should be included in the header of the Ajax response, so that the
|
|
||||||
client can load up those scripts and stylesheets upon completion of the Ajax request. This could be coded quite
|
|
||||||
cleanly, but for best results we'd want to extend prototype.js with our own changes to their Ajax system, so that every
|
|
||||||
script had consistent support for this.
|
|
||||||
|
|
||||||
### Lots of files
|
|
||||||
|
|
||||||
Because everything's quite modular, it's easy to end up with a large number of small CSS and JavaScript files. This has
|
|
||||||
problems with download time, and potentially maintainability.
|
|
||||||
|
|
||||||
We don't have any easy answers here, but here are some ideas:
|
|
||||||
|
|
||||||
* Merging the required files into a single download on the server. The flip side of this is that if every page has a
|
|
||||||
slightly different JS/CSS requirements, the whole lot will be refetched.
|
|
||||||
* Better: "Tagging" each required file for different use-cases, and creating a small set of common functionalities
|
|
||||||
(e.g. everything tagged "base" such as prototype.js would always be included)
|
|
||||||
* Do lazy fetching of scripts within an ajax-call. This seems to be possible, but very tricky due to the asynchronous
|
|
||||||
nature of an ajax-request. Needs some more research
|
|
||||||
|
|
||||||
## API Documentation
|
## API Documentation
|
||||||
`[api:Requirements]`
|
`[api:Requirements]`
|
Loading…
Reference in New Issue
Block a user