Если вам важна производительность, жизненно важно знать, насколько большой может быть таблица статей и как она индексируется . Если таблица статей достаточно мала, чтобы другие этапы создания веб-страницы превысили стоимость двух запросов (которые можно распараллелить), просто сгенерируйте оба списка, поместите два делителя и напишите клиентский JavaScript, чтобы показать указанный div только тогда, когда флажок установлен или снят. Что-то вроде
<script type="text/javascript">
function updateArticlesList() {
var box = document.getElementById("ckart");
if (box.checked) {
document.getElementById("article0").style.visibility = "collapse";
document.getElementById("article1").style.visibility = "visible";
} else {
document.getElementById("article0").style.visibility = "visible";
document.getElementById("article1").style.visibility = "collapse";
}
}
</script>
<input id="ckart" type="checkbox" onclick="updateArticlesList()">Switch articles list</input>
должен по крайней мере решить вопрос 2. Если таблица статей является большой и медленной для запроса, вам нужно пойти по совершенно иному маршруту и заполнить пропущенный элемент div, только если пользователь действительно нажмет на флажок. В этом случае вам нужно добавить вызовы AJAX в функцию updateArticlesList.
С другой стороны, вопрос 1 - это совершенно другой вопрос. Я должен предположить, что у вас есть какой-то способ узнать, кто является текущим пользователем, когда вы создаете страницу, иначе бессмысленно пытаться говорить о «том, что пользователь делал раньше». Но, с помощью приведенного выше кода, единственное, что вам нужно сделать, это установить начальные значения видимости для divs article0 и article1 и видимости флажка ckart. AJAX приходит по вопросу сохранения настроек пользователя обратно на сервер. Лучше всего добавить URL-адрес на сервер (у меня гораздо больше опыта работы с Django, поэтому мой первый инстинкт - это запись urls.py, хотя я знаю, что это не относится к PHP), так что отправка обратной строки «0» или «1» приводит к сохранению настроек в профиле пользователя. На следующей странице показа, если для параметра видимости статьи пользователя задано значение 0, то div article0 виден, article1 свернут, а ckart не отмечен. Если для параметра видимости статьи пользователя задано значение 1, то article0 свернут, article1 виден и ckart проверен.