Запрос mysql вывод дублей на странице. Сохранения страницы html как таблицу XSL

InstantCMS 2.X

Запрос mysql вывод дублей на странице.

#1 11 августа 2022 в 07:41

Добрый день.

Нужно сделать вывод количество дублирующихся заголовков.

В базе без проблем прописал проверил все работает. Результат устроил!!!!

Таблица: cms_con_kipa

Поле сравнения: title

Вывод: DUBL

select title, count(*) as dubl from cms_con_kipa group by title having title > 1

Как в обычный  создать index.php знаю, все работает.

<?php
$servername = «localhost»;
$username = "*********";
$password = "**********";
$dbname = "**************";
 
$conn = new mysqli($servername, $username, $password, $dbname);

$sql = «SELECT data2, title, gran, mine, content, part2, executor, tdby, kol, count(*) as dubl from cms_con_kipa group by title having title > 1»;

$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
      echo $row[«data2»]. $row[«title»]. $row[«gran»]. $row[«mine»]. $row[«content»]. $row[«part2»]. $row[«executor»]. $row[«COUNT(*)»]."<br>"; 
               }

$conn->close(); 
?>

А вот теперь вопрос.  Где прописать instantcms голову сломал не получается. За ранние спасибо.

#2 11 августа 2022 в 08:14

Где прописать instantcms

makson

Да, хоть где. Можно между тегами <?php и ?> с двумя косыми и пробелом, так например // instantcms или рядом с монитором на листочке бумаги.

А вообще, вопрос звучит интересно. Вариантов ответов можно напридумать массу.

#3 11 августа 2022 в 09:07

Где прописать instantcms

makson

Да, хоть где. Можно между тегами <?php и ?> с двумя косыми и пробелом, так например // instantcms или рядом с монитором на листочке бумаги.

А вообще, вопрос звучит интересно. Вариантов ответов можно напридумать массу.

Loadырь

А можно по точней.?

Вот берем Тип контента localhost/kihf

Поля стандартные.

<?php $sql = «SELECT data2, title, gran, mine, content, part2, executor, tdby, kol, count(*) as dubl from cms_con_kipa group by title having title > 1»;?> и где прописать в стиле?

Надо прописать так что вид страницы моего сайта не изменился а просто добавился запрос к базе. Я понимаю что мне только останется прописать поле $row[«COUNT(*)»]

#4 11 августа 2022 в 09:12

А можно по точней.?

makson

Это от вас ждут «поточнее» — «где, чего и сколько?» Чего — понятно, осталось с остальным разобраться.

#5 11 августа 2022 в 11:13

А можно по точней.?

makson

Это от вас ждут «поточнее» — «где, чего и сколько?» Чего — понятно, осталось с остальным разобраться.

Loadырь

Наверное я не правильно довожу что мне нужно сделать.

Попробую объяснить.

Мне нужно на сайте сделать что бы автоматически показывал сколько раз повторяется заголовок в колонке.

Итог должен быть такой.

Изображение

Что я для для этого делаю.

Первое захожу в базу

Запрос SQL

Прописываю

select title, count(*) as dubl from cms_con_kipa group by title having title > 1

Итог: все отлично.

Изображение

Дальше 

Создаю файл: default_list_table_dybl.tpl.php


<?php

$servername = «localhost»;

$username = «makson0x_jjjjjk»;

$password = «347582»;

$dbname = «makson0x_jjjjjk»;

$conn = new mysqli($servername, $username, $password, $dbname);

$sql = «SELECT data2, title, gran, mine, content, part2, executor, tdby, kol, COUNT(*) FROM cms_con_kipa GROUP BY title HAVING(title) >1 ORDER BY `cms_con_kipa`.`title` ASC»;

$result = $conn->query($sql);

if ($result->num_rows > 10) {

    while ($row = $result->fetch_assoc()) {

    echo  $row[«data2»];  echo $row[«title»]; echo $row[«COUNT(*)»]."<br>";

    }

}

$conn->close();

?>

Закидываю его в папку content

И вот итог:Изображение

Ну все таки наверно как то не правильно делаю. Прописывать подключение к базе данных в каждом файле это так не должно быть.

Добавлено спустя 29 минут

Я так понимаю мне надо что бы не прописывать подключение к базе данных надо отредоктировать файл /system/controllers/content/model.php

#6 11 августа 2022 в 21:58

Я так понимаю мне надо что бы не прописывать подключение к базе данных надо отредоктировать файл

makson

Нет, не надо редактировать файлы движка.

Ну все таки наверно как то не правильно делаю. Прописывать подключение к базе данных в каждом файле это так не должно быть.

makson

Размещать логику и обработку данных из базы в файлах шаблона тоже неправильно, ну да ладно.

Попробуйте так:

  1. <?php
  2.  
  3. $model = cmsCore::getModel('content');
  4.  
  5. $sql = "SELECT data2, title, gran, mine, content, part2, executor, tdby, kol, COUNT(*) count FROM cms_con_kipa GROUP BY title HAVING(title) >1 ORDER BY `cms_con_kipa`.`title` ";
  6.  
  7. $result = $model->db->query($sql);
  8.  
  9. foreach ($result as $res){
  10.  
  11. echo $res['data2']; echo $res['title']; echo $res['count']."<br>";
  12.  
  13. }
  14.  
  15. ?>
#7 12 августа 2022 в 10:47

Я так понимаю мне надо что бы не прописывать подключение к базе данных надо отредоктировать файл

makson

Нет, не надо редактировать файлы движка.

Ну все таки наверно как то не правильно делаю. Прописывать подключение к базе данных в каждом файле это так не должно быть.

makson

Размещать логику и обработку данных из базы в файлах шаблона тоже неправильно, ну да ладно.

Попробуйте так:

  1. <?php
  2.  
  3. $model = cmsCore::getModel('content');
  4.  
  5. $sql = "SELECT data2, title, gran, mine, content, part2, executor, tdby, kol, COUNT(*) count FROM cms_con_kipa GROUP BY title HAVING(title) >1 ORDER BY `cms_con_kipa`.`title` ";
  6.  
  7. $result = $model->db->query($sql);
  8.  
  9. foreach ($result as $res){
  10.  
  11. echo $res['data2']; echo $res['title']; echo $res['count']."<br>";
  12.  
  13. }
  14.  
  15. ?>
Ris

Спасибо. Сделал как вы написали.  Работает))))

Добавлено спустя 15 минут

Дальше мне надо сделать табличный вариант.

<table style=«border-collapse:collapse;width:100%;»>

               <tbody>

                               <tr>

                                               <td>ДАТА</td>

                                               <td>Серийный номер</td>

                                               <td>ДУБЛЬ</td>

                               </tr>

                <tr>

                                               <td><?php echo $res['data2'];?></td>

                                               <td><?php echo $res['title'];?></td>

                                               <td><?php echo $res['count'];?></td>

                               </tr>

                </tbody>

</table>

Думал все легко, но не тут то было.

<?php
 
$model = cmsCore::getModel('content');
 
$sql = «SELECT data2, title, gran, mine, content, part2, executor, tdby, kol, COUNT(*) count FROM cms_con_kipa GROUP BY title HAVING(title) >1 ORDER BY `cms_con_kipa`.`title` »;
 
$result = $model->db->query($sql);
 
foreach ($result as $res){
 

<table style=«border-collapse:collapse;width:100%;»>

               <tbody>

                               <tr>

                                               <td>ДАТА</td>

                                               <td>Серийный номер</td>

                                               <td>ДУБЛЬ</td>

                               </tr>

                <tr>

                                               <td><?php echo $res['data2'];?></td>

                                               <td><?php echo $res['title'];?></td>

                                               <td><?php echo $res['count'];?></td>

                               </tr>

                </tbody>

</table> 
}
 
?>

Подскажите как сделать табличный вариант. Куда бы я не поставил это(<) знак ошибка.

Если таблицу прописываю после закрытие } ?> То таблица отображается но данные появляются только в первой строке.

#8 12 августа 2022 в 11:41

В цикл надо заносить только это

  1. <tr>
  2. <td><?php echo $res['data2'];?></td>
  3. <td><?php echo $res['title'];?></td>
  4. <td><?php echo $res['count'];?></td>
  5. </tr>

И вам надо ещё разделить html код от кода php

#9 15 августа 2022 в 12:40

Ой что то не чего не получается.

<?php

$model = cmsCore::getModel('content');

$sql = «SELECT data2, title, gran, mine, content, part2, executor, tdby, kol, COUNT(*) count FROM cms_con_kipa GROUP BY title HAVING(title) >1 ORDER BY `cms_con_kipa`.`title` »;

$result = $model->db->query($sql);

foreach ($result as $res){

}

?>

<table style=«border-collapse:collapse;width:100%;»>

                <tbody>

                               <tr>

                                               <td>ДАТА</td>

                                               <td>Серийный номер</td>

                                               <td>ДУБЛЬ</td>

                               </tr>

                <tr>

                                               <td><?php echo $res['data2'];?></td>

                                               <td><?php echo $res['title'];?></td>

                                               <td><?php echo $res['count'];?></td>

                               </tr>

                </tbody>

</table>

Нашел решения. Просто надо подумать  было

<?php

echo '<table>';

foreach ($result as $res){

                echo '<tr>';

                echo "<td>{$res['data2']}</td>";

                echo "<td>{$res['title']}</td>";

                echo "<td>{$res['count']}</td>";

                echo '</tr>';

                } echo '</table>';

                 ?>

Ну теперь буду думать как сохранять в XSL

Вот что у меня получилось


<?php
$model = cmsCore::getModel('content');
$sql = «SELECT data2, title, gran, mine, content, part2, executor, tdby, kol, COUNT(*) count FROM cms_con_kipa GROUP BY title HAVING(title) >1 ORDER BY `cms_con_kipa`.`title` »;
$result = $model->db->query($sql);
    ///echo $res['data2']; echo $res['title']; echo $res['count']."<br>";

?>


<?php if ($items){ ?>
    <div class=«content_list table <?php echo $ctype['name']; ?>_list»>

        <table>
            <thead>
                <tr><table id=«toExcel» class=«uitable»>


<button onclick=«exceller()»>Сохранить файл EXCEL</button>

<script>
  function exceller() {
    var uri = 'data:application/vnd.ms-excel;base64,',
      template = '<html xmlns:o=«urn:schemas-microsoft-com:office:office» xmlns:x=«urn:schemas-microsoft-com:office:excel» xmlns=«www.w3.org/TR/TR/html40»><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></xml><![endif]--></head><body><table>{table}</table></body></html>',
      base64 = function(str) {
        return window.btoa(unescape(encodeURIComponent(str)))
      },
      format = function(s, c) {
        return s.replace(/{(\w+)}/g, function(m, p) {
          return c[p];
        })
      }
    var toExcel = document.getElementById(«toExcel»).innerHTML;
    var ctx = {
      worksheet: name || '',
      table: toExcel
    };
    var link = document.createElement(«a»);
    link.download = «export.xls»;
    link.href = uri + base64(format(template, ctx))
    link.click();
  }

</script>
<tr height=«20» style=«height:15.0pt»> 
            <td colspan=«1» style=«border-width: 1px; border-style: solid; border-color: rgb(143, 139, 139);»><span style=«font-size: 8pt;»><span style=«font-weight: bold; font-size: 8pt;»>Дата</td>
            <td colspan=«1» style=«border-width: 1px; border-style: solid; border-color: rgb(143, 139, 139);»<span style=«font-size: 8pt;»><span style=«font-weight: bold; font-size: 8pt;»><center>Серийный номер</center></td>
            <td colspan=«1» style=«border-width: 1px; border-style: solid; border-color: rgb(143, 139, 139);»<span style=«font-size: 8pt;»><span style=«font-weight: bold; font-size: 8pt;»><center>ДУБЛЬ</center></td>
</tr>
 <?php 

foreach ($result as $res){
                echo '<tr>';
                echo "<td>{$res['data2']}</td>";
                echo "<td>{$res['title']}</td>";
                echo "<td>{$res['count']}</td>";
                echo '</tr>';
                } echo '<tr>'; 
                 ?>

                    <?php if (isset($fields['photo']) && $fields['photo']['is_in_list']){ ?>
                        <th> </th>
                    <?php } ?>
                    <?php if ($ctype['is_rating']){ ?>
                        <th><?php echo LANG_RATING; ?></th>
                    <?php } ?>

                    <?php foreach($fields as $name => $field){ ?>
                        <?php if ($field['is_system'] || !$field['is_in_list']) { unset($fields[$name]); continue; } ?>
                        <?php if ($field['groups_read'] && !$user->isInGroups($field['groups_read'])) { unset($fields[$name]); continue; } ?>
                        <?php
                            if (!isset($field['options']['label_in_list'])) {
                                $label_pos = 'none';
                            } else {
                                $label_pos = $field['options']['label_in_list'];
                            }
                        ?>

                    <?php } ?>
                </tr>
            </thead>
            <tbody>
                <?php foreach($items as $item){ ?>
                    <tr<?php if (!empty($item['is_vip'])){ ?> class=«is_vip»<?php } ?>>
                        <?php if (isset($fields['photo']) && $fields['photo']['is_in_list']){ ?>
                            

 <?php } ?>
                        <?php if (!empty($item['rating_widget'])){ ?>
                            <td class=«rating»>
                                <?php echo $item['rating_widget']; ?>
                            </td>
                        <?php } ?>

                </tr>
                <?php } ?>
            </tbody>
<br>

</table>

    </div>


<?php  } else {

    if(!empty($ctype['labels']['many'])){
        echo sprintf(LANG_TARGET_LIST_EMPTY, $ctype['labels']['many']);
    } else {
        echo LANG_LIST_EMPTY;
    }

}

Изображение

Остается сделать заголовок как ссылка. 

Ну вот казалась так все просто, но не тут было.

Как прописать что бы поле title  была ссылкой?

foreach ($result as $res){
                echo '<tr>';
                echo "<td>{$res['data2']}</td>";
                echo "<td>{$res['title']}</td>";
                echo "<td>{$res['count']}</td>";
                echo '</tr>';
                } echo '<tr>'; 
                 ?>

Добавлено спустя 3 часа

Поля ссылка вопрос решил: echo "<td><a href='kipa/". $res['slug']. ".html'>{$res['title']}</a></td>";

Ребят подскажите как прописать поля мультивыбор и список.

#10 15 августа 2022 в 13:12

Ребят подскажите как прописать поля мультивыбор и список.

makson

Как-то так

  1. $fields['название_поля']['handler']->parse($res['название_поля']);
#11 16 августа 2022 в 04:25

Ребят подскажите как прописать поля мультивыбор и список.

makson

Как-то так

  1. $fields['название_поля']['handler']->parse($res['название_поля']);
Loadырь

Огромное спасибо. Работает

echo "<td>{$fields['content']['handler']->parse($res['content'])}</td>";

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.