Переместить элемент в первую позицию массива в <cfloop>, если x = true - PullRequest
1 голос
/ 17 марта 2012

У меня есть CFC, выполняющий запрос через AJAX, чтобы получить список информации / путей к изображениям для отображения на моей странице.В моей таблице есть логический столбец main, чтобы указать, является ли изображение основным изображением и отображается ли оно над всеми другими изображениями.

Поскольку я обращаюсь к результатам запроса через AJAX, мне нужно создатьмассив данных перед возвратом на страницу, где моя функция javascript зацикливается на возвращаемых данных и создает теги <img>.

Как я могу получить либо мой CFC, либо мой цикл javascript для распознавания main логическое и переместить это изображение в первую позицию для отображения на моей странице?

Вот мой CFC:

<cfquery name="project_images">
  select path, title, alt, main from tbl_images where pid = #projects.pid#;
</cfquery>
  <cfloop query="project_images">
  <cfset imgStruct = structNew()>
  <cfset imgStruct["path"] = path>
  <cfset imgStruct["alt"] = alt>
  <cfset imgStruct["title"] = title>
  <cfset imgStruct["main"] = main>
  <cfset ArrayAppend(imgArray, imgStruct)>
</cfloop>
<cfset local.response["images"] = #imgArray#>
<cfreturn local.response>    

И моя функция jQuery:

$('.project_class').click(function(e){
    e.preventDefault();
    var theclass = $(this).attr('id');
    var cat = 'planning';

    $.getJSON("../cfc/projects.cfc?returnFormat=json&method=getProjects",
        {"theclass":theclass, "cat":cat},
        function(response){
            $('#portfolio_item').html(response.html);
            var imageData = response.images;
            $.each(imageData, function(i, item) {
                $('#portfolio_item').append('<img src="..' + item.path + '" />');
            });
        });
});

1 Ответ

3 голосов
/ 17 марта 2012

Один из вариантов - сортировка изображений в вашем SQL.Используйте оператор CASE, чтобы присвоить записи main более высокий порядок сортировки, чем остальные.

   SELECT CASE WHEN main = 1 THEN 0 ELSE 1 END AS SortNum
          , path
          , title
          , alt
          , main 
   FROM  tbl_images 
   WHERE pid = <cfqueryparam value="#projects.pid#" cfsqltype="cf_sql_integer">
   ORDER BY SortNum

Или вы можете проверить флаг main в цикле и использовать arrayPrepend вместо arrayAppend, когда флаг равен true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...