1. Получаем модель контента:
$content_model = cmsCore::getModel('content');
2. Получаем дерево категорий (второй параметр определяет показывать корневую категорию или нет):
$categories = $content_model->getCategoriesTree('articles', false);
3. В полученном массиве каждый элемент содержит все данные (поля) каждой категории. Нам нужно преобразовать этот массив в простой список
id => title, чтобы потом вывести в <select>:
$categories_list = array_collection_to_list($categories, 'id', 'title');
4. Формируем и выводим <select>:
echo html_select('category', $categories_list);
Список записей для категории нужно формировать где-то (например, в экшене собственного контроллера) по AJAX-запросу и возвращать в виде JSON. С помощью jQuery при выборе категории запрашивать список записей и заполнить им второй select.
Получить записи контента articles для категории $category_id:
// получаем модель
$content_model = cmsCore::getModel('content');
/ /получаем категорию
$category = $content_model->getCategory('articles', $category_id);
// фильтруем по категории и получаем список записей
$items = $content_model->filterCategory('articles', $category)->getContentItems('articles');
// преобразуем полученный массив в простой список id => title
$items_list = array_collection_to_list($items, 'id', 'title');
// рендерим и возвращаем JSON
cmsTemplate::getInstance()->renderJSON($items_list);