We set up an Admin document using an Admin template for global Template Variables.
Then we setup a context setting we call (you can call it whatever you want): admin_page_id
We input the page ID into the Context Setting and then save it.
This allows the client to go into the Admin page and change any TVs you've made accessible to them. We usually heavily modify this page using
Manager Customization (formerly Forms Customzation and still called that in the docs) so they only see the Template Variables tab (which we also rename using Manager Customization).
Then in chunks that reference those values (such as a [[$footer]] we use
fastField (
fastField Docs)to grab the value, i.e.
[[#[[++admin_page_id]].tv.facebookAddress]]
Where the TV is facebookAddress and the value would be their Facebook URL. So we'd have something like this within the footer chunk:
<a class="btn btn-facebook" href="[[#[[++admin_page_id]].tv.facebookAddress]]" target="_blank">
<i class="fa fa-facebook fa-2x"></i>
</a>
Other options are of course those mentioned above but keep in mind that
ClientConfig is not context sensitive (the last I checked) so if you use multiple contexts (we do all the time but we realize not everyone does) then it's not as useful.
You could also use context settings themselves but it's usually not a good idea to give clients access to such sensitive settings.