ejecutar la función php usando ajax para actualizar la variable de plantilla phpBB

NOTA: Aquí hay muchos detalles, así que si alguien necesita una versión condensada de esto, me complace resumirlo.

Estoy tratando de ejecutar una función en mi archivo php, que a su vez, actualizará una variable de plantilla. Como ejemplo, aquí hay una de esas funciones:

function get_vehicle_makes()
{
$sql = 'SELECT DISTINCT make FROM phpbb_vehicles
        WHERE year = ' . $select_vehicle_year;

$result = $db->sql_query($sql);

while($row = $db->sql_fetchrow($result))
{
    $template->assign_block_vars('vehicle_makes', array(
        'MAKE'    => $row['make'],
    ));
}
$db->sql_freeresult($result);
}

Sé que esta función funciona. Estoy tratando de acceder a esta función en mi Javascript con:

function updateMakes(pageLoaded) {
    var yearSelect = document.getElementById("vehicle_year");
    var makeSelect = document.getElementById("vehicle_make");
    var modelSelect = document.getElementById("vehicle_model");

    $('#vehicle_make').html('');

    $.ajax({ url: '/posting.php',
            data: {action: 'get_vehicle_makes'},
            type: 'post',
            success:function(result)//we got the response
            {
            alert(result);
            },
            error:function(exception){alert('Exception:'+exception);}
    });
    <!-- BEGIN vehicle_makes -->
        var option = document.createElement("option");
        option.text = ('{vehicle_makes.MAKE}');
        makeSelect.add(option);
    <!-- END vehicle_makes -->

    if(pageLoaded){
        makeSelect.value='{VEHICLE_MAKE}{DRAFT_VEHICLE_MAKE}';
        updateModels(true);
    }else{
        makeSelect.selectedIndex = -1;
        updateModels(false);
    }
}

La sección en mi javascript ...

<!-- BEGIN vehicle_makes -->
        var option = document.createElement("option");
        option.text = ('{vehicle_makes.MAKE}');
        makeSelect.add(option);
<!-- END vehicle_makes -->

... es un bucle de bloque y recorrerá la variable de bloque, vehicle_makes, establecida en la función PHP. Esto funciona al cargar la página porque la página que se carga es el nuevo.php al que estoy tratando de hacer una llamada Ajax, y todo el PHP se ejecuta en ese archivo al cargar. Sin embargo, necesito que la función se ejecute nuevamente, para actualizar esa variable de bloque, ya que cambiará en función de un cambio de selección en el HTML. No sé si este tipo de bucle de bloque es común. Estoy aprendiendo sobre ellos ya que se usan con un foro que instalé en mi sitio, phpBB. (He buscado ayuda en esto en sus foros de soporte). Creo que otra posible solución sería devolver una matriz, pero me gustaría mantener la variable de bloque si es posible por razones de coherencia.

Este es el bit de código en el php que lee $ _POST y llama a la función php:

if(isset($_POST['action']) && !empty($_POST['action'])) {
    $action = $_POST['action'];

    //Get vehicle vars - $select_vehicle_model is used right now, but what the heck.
    $select_vehicle_year = utf8_normalize_nfc(request_var('vehicle_year', '', true));
    $select_vehicle_make = utf8_normalize_nfc(request_var('vehicle_make', '', true));
    $select_vehicle_model = utf8_normalize_nfc(request_var('vehicle_model', '', true));

    switch($action) {
    case 'get_vehicle_makes' :
        get_vehicle_makes();
        break;
    case 'get_vehicle_models' :
        get_vehicle_models();
        break;
    // ...etc...
    }
}

Y este es el javascript para ejecutar el Ajax:

function updateMakes(pageLoaded) {
    var yearSelect = document.getElementById("vehicle_year");
    var makeSelect = document.getElementById("vehicle_make");
    var modelSelect = document.getElementById("vehicle_model");

    $('#vehicle_make').html('');

    $.ajax({ url: '/posting.php',
            data: {action: 'get_vehicle_makes'},
            type: 'post',
            success:function(result)//we got the response
            {
            alert(result);
            },
            error:function(exception){alert('Exception:'+exception);}
    });
    <!-- BEGIN vehicle_makes -->
        var option = document.createElement("option");
        option.text = ('{vehicle_makes.MAKE}');
        makeSelect.add(option);
    <!-- END vehicle_makes -->

    if(pageLoaded){
        makeSelect.value='{VEHICLE_MAKE}{DRAFT_VEHICLE_MAKE}';
        updateModels(true);
    }else{
        makeSelect.selectedIndex = -1;
        updateModels(false);
    }
}

El javascript se ejecutará y el ajax tendrá éxito. He comprobado la pestaña de red y la pestaña de consola, y he realizado varias pruebas para confirmarlo. Parece que la variable de bloque no se está configurando. ¿Es posible lo que intento hacer? Tengo la sensación de que para obtener esta respuesta, necesitaremos saber más sobre el motor de plantillas de phpBB y cómo funciona con estas variables de plantilla. Además, solo para aclarar, creo que el término 'variable de plantilla' es específico de phpBB. Es el término que usan para las variables establecidas en PHP, a las que acceden los archivos HTML y javascript. Esto funciona a través de una clase phpBB llamada 'plantilla' y una función llamada 'asignar_bloque_vares'. No sé exactamente cómo funciona eso.

Si alguien ha hecho esto para phpBB, o tiene alguna idea, lo agradecería.

Respuestas a la pregunta(1)

Su respuesta a la pregunta