У меня есть тип документа с именем Career Item
, который содержит некоторые свойства и 2 средства выбора контента. один для выбора типа карьеры: например. Водитель, другой — для выбора ветки, в которой будет размещена карьера: например. Гент Бельгия.
Типы и ветки My Career расположены в отдельных Content repository
, это означает, что у них нет шаблона, это просто документ со свойствами, которые можно использовать на нескольких страницах контента.
Я создал для этого 2 фильтра, и с помощью jQuery мне удалось установить URL-адрес на основе выбора, чтобы получить такие URL-адреса:
http://localhost:59733/nl/vacatures/?f=1075&f=1076&b=1085&b=1082
Здесь у вас есть f
, который содержит идентификаторы Career type
, и b
, который содержит идентификатор Branch
.
Теперь в моей бритве я выполняю фильтрацию узлов контента на основе выбора, но это довольно запутано.
// Collect values for branch and function from the url querystring to perform filtering
var branch = umbraco.library.RequestQueryString("b"); // eg: 1085,1082 from example url above
var function = umbraco.library.RequestQueryString("f"); // eg: 1075,1076 from example url above
// Take the careers list content node
var careersList = Umbraco.TypedContentAtRoot().DescendantsOrSelf("CareersList").FirstOrDefault();
var careerItems = careersList.Children.Where("Visible");
string query = "";
string funcQuery = "";
string branchQuery = "";
// Filter on fuction
if (!String.IsNullOrEmpty(function))
{
// Property alias function: content picker
string[] functions = function.Split(',');
foreach (string func in functions)
{
if (!String.IsNullOrEmpty(funcQuery))
{
funcQuery += " || function == \"" + func + "\"";
}
else
{
funcQuery = "function == \"" + func + "\"";
}
}
}
// Filter on branch
if (!String.IsNullOrEmpty(branch))
{
// Property alias branch: content picker
string[] branches = branch.Split(',');
foreach (string br in branches)
{
if (!String.IsNullOrEmpty(branchQuery))
{
branchQuery += " || branch == \"" + br + "\"";
}
else
{
branchQuery = "branch == \"" + br + "\"";
}
}
}
funcQuery = !String.IsNullOrEmpty(funcQuery) ? "(" + funcQuery + ")" : "";
branchQuery = !String.IsNullOrEmpty(branchQuery) ? "(" + branchQuery + ")" : "";
query = funcQuery + (!String.IsNullOrEmpty(branchQuery) ? " && " + branchQuery : "");
if (!String.IsNullOrEmpty(query))
{
careerItems = careerItems.Where(query);
}
Я что-то упустил здесь, и можно ли это упростить? Потому что сейчас только 2 фильтра, а если у меня 5 или 6 фильтров, то это не сработает...
/Майкл