Pieniä kysymyksiä ohjelmoinnista

Liittynyt
17.10.2016
Viestejä
5 334
Hyvästä en osaa sanoa, mutta arihovi.com -sivustolta voi tilata maksuttoman SQL-pikaopas E-kirjan.
Melkoinen keksintö tuo pikaoppaan lataaminen kun pitää sähköpostiosoite antaa ja samalla liittyy postituslistalle ja vieläpä pdf-tiedostossakin salasana. Onneksi sekä temporarymail että Print to PDF toimii ettei tarvitse tulevaisuudessa ihmetellä jotain tiedoston salasanaa eikä saada roskapostia.
 
Liittynyt
08.02.2019
Viestejä
1 253
Olen käyttänyt tietokoneita "aina" ja ison osan ajasta koodannutkin, mutta en ole ikinä kirjoittanut riviäkään SQL:ää. En tajua yllä olevasta keskustelusta mitään. Mikäköhän olisi tehokas tapa näin "vanhemmalla iällä" opetella SQL:ää ja muita tietokantajuttuja, jos taustalla on tekniikan tohtorin tutkinto ja todennäköisesti ihan riittävä ymmärrys tietorakenteista ja algoritmeista? Onko esim. jotain hyvää kirjaa?
Kirjoista löytyy varmasti hyviä vaihtoehtoja, mutta se mitä kannattaa erityisesti katsoa, että jos löytyisi kirja joka ei ota varsinaisesti kantaa mihinkään tiettyyn tietokanta tuotteeseen. Eli vähän kuin ohjelmoinnissa ensin pitää hallita ohjelmointi ja sitten voi helposti opetella tietyn kielen tarpeen mukaan.
 
Liittynyt
02.11.2016
Viestejä
1 174
Olen käyttänyt tietokoneita "aina" ja ison osan ajasta koodannutkin, mutta en ole ikinä kirjoittanut riviäkään SQL:ää. En tajua yllä olevasta keskustelusta mitään. Mikäköhän olisi tehokas tapa näin "vanhemmalla iällä" opetella SQL:ää ja muita tietokantajuttuja, jos taustalla on tekniikan tohtorin tutkinto ja todennäköisesti ihan riittävä ymmärrys tietorakenteista ja algoritmeista? Onko esim. jotain hyvää kirjaa?
Stanfordin yliopistolla oli joskus ainakin mooc tietokannoista. Siinä oli tehtäviä tietysti myös mukana. Jos se jostain löytyisi. https://online.stanford.edu/courses/soe-ydatabases-databases tuo on nykyään osissa. Voi olla, että siinä on mukana jostain syystä XML:ää ja sen kyselykieliä, mutta ne voi skippailla.
 

pAy

Liittynyt
15.08.2020
Viestejä
77
Tuollaisen koodin olen jostain saanut/löytänyt, näyttää kansiossa olevat kuvat tai viimeisimmät. Saisiko tuota muokattua niin, että näyttää kaikkien alikansioidenkin kuvat? Viitsisikö joku myös selittää miten tekee valinnan että ei näytä kaikkia kuvia? Kiitos!



PHP:
<?php
class ImageFilterIterator extends FilterIterator {
  public function accept(): bool {
    return $this->isFile() && in_array(strtolower($this->getExtension()), ["jpg", "png", "webp"]);
  }
}

$images = [];
foreach (range(1, 10) as $i) {
  $dir = __DIR__ . "/cam" . $i;
  [$images[$i], $ctime] = [null, 0];
  foreach (new ImageFilterIterator(new FilesystemIterator($dir)) as $info) {
    if ($info->getCTime() > $ctime) {
      [$images[$i], $ctime] = [$info->getFilename(), $info->getCTime()];
    }
  }
}

header("Refresh: 300");
?>
<!DOCTYPE html>
<html lang="fi">
<head>
  <meta charset="utf-8">
  <title>Uusimmat kuvat</title>
  <style>
    img { width: 65%; }
    a { display: block; margin: 0.5rem; }
  </style>
</head>
<body>
<?php
foreach ($images as $i => $img) {
  $src = $img ? "cam$i/" . htmlspecialchars($img) : "data:,x";
  echo "<a href='cam$i'><img src='$src' alt='Kamera $i' /></a>";
}
?>
</body>
</html>
 
Liittynyt
03.07.2018
Viestejä
347
Nyt on kyllä basic kysymys, mutta miten saa mysql:llä haettua listan niin että se on järjestetty päivämäärän mukaan uusimmasta vanhimpaan, mutta ensimmäisen jälkeen tuleekin perään heti kaikki muutkin saman kategorian merkinnät ja nekin uusimmasta vanhimpaan. Sitten listautuu toiseksi uusin kategoria jne..

Taulu on hyvin simppeli:
id = int
city = varchar, eli kategoria
name = varchar, listassa näkyvä nimi, ei vaikuta sorttaukseen
date_updated = datetime

eli

helsinki aaaa 2021-12-12
helsinki jkkjkj 2018-01-01
helsinki sdsdsd 2017-01-01
vantaa jjjjj 2021-12-11
vantaa kjjs 2021-12-10
kerava aaaa 2020-12-12
 
Liittynyt
08.02.2019
Viestejä
1 253
Nyt on kyllä basic kysymys, mutta miten saa mysql:llä haettua listan niin että se on järjestetty päivämäärän mukaan uusimmasta vanhimpaan, mutta ensimmäisen jälkeen tuleekin perään heti kaikki muutkin saman kategorian merkinnät ja nekin uusimmasta vanhimpaan. Sitten listautuu toiseksi uusin kategoria jne..

Taulu on hyvin simppeli:
id = int
city = varchar, eli kategoria
name = varchar, listassa näkyvä nimi, ei vaikuta sorttaukseen
date_updated = datetime

eli

helsinki aaaa 2021-12-12
helsinki jkkjkj 2018-01-01
helsinki sdsdsd 2017-01-01
vantaa jjjjj 2021-12-11
vantaa kjjs 2021-12-10
kerava aaaa 2020-12-12
Eiköhän ihan tällainen toimisi:
SQL:
SELECT city, name, date_updated
FROM taulu
ORDER BY city ASC, date_updated DESC
Edit: lisätty koko kysely.
 
Viimeksi muokattu:
Liittynyt
08.02.2019
Viestejä
1 253
Saisiko tuota muokattua niin, että näyttää kaikkien alikansioidenkin kuvat?
Pystytkö yhtään tarkentamaan, että millainen hakemistorakenne?

Viitsisikö joku myös selittää miten tekee valinnan että ei näytä kaikkia kuvia?
Niin siis kyseinen koodihan listaa vain uusimmat tiedostot cam1, cam2, cam3...cam10 hakemistoista? Looppi filteroi tämän käyttämällä ctime arvoa, eli tallentaa images[$i] paikalle aina uusimman kuvan, mitä hakemistosta löytyy. mtime voisi olla parempi ainakin Linux puolelle, koska esimerkiksi pelkkä oikeuksien muuttaminen päivittää ctimen.
 

pAy

Liittynyt
15.08.2020
Viestejä
77
Pystytkö yhtään tarkentamaan, että millainen hakemistorakenne?
Yhteen kansioon, CAM10 kamera lähettää kuvat eri kansioihin eri päivinä esim. tämänpäivän kuvien polku on CAM10 -> 2021 -> 09 -> 26

Lisäksi kun haluan katsoa kaikki CAM10 kuvat niin nykyinen kansiossa oleva koodi ei niitä näytä, sitäkin pitäisi muokata niin, että näyttää alikansioiden kuvat...

PHP:
<?php
error_reporting(E_ALL);

class ImageFilterIterator extends FilterIterator {
    public function accept() {
        if(preg_match('/^(?:gif|jpe?g|png)$/i',$this->getExtension())) {
            return true;
        } else {
            return false;
        }
    }
}

$numberOfImages = 50; // How many images are shown
$maxDirsize = 300; // How big folder can be
$deleteOlderinDays = 60; // Delete images older than this (in days)
$dir_location = dirname(__FILE__);

$oDateNow = new DateTime();
$dir = new DirectoryIterator($dir_location);
$size = number_format($dir->getSize() / 1024, 2);
$imageArr = array();
foreach(new ImageFilterIterator(new FilesystemIterator($dir_location)) as $fileInfo){
    if($fileInfo->isFile()){
        $cTime = new DateTime();
        $cTime->setTimestamp($fileInfo->getCTime());
        $oDateIntervall = $oDateNow->diff($cTime)->days;

        if ($size > $maxDirsize) {
            if ($oDateIntervall > $deleteOlderinDays) {
                unlink($dir_location . "/" . $fileInfo->getFileName());
            } else {
                $imageArr[$fileInfo->getCTime()][] = $fileInfo->getFilename();
            }
        } else {
            $imageArr[$fileInfo->getCTime()][] = $fileInfo->getFilename();
        }
    }
}


krsort($imageArr);
$newimageArr=array_slice($imageArr,0,$numberOfImages-1);
?>

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>autokatos</title>
  <style>img {width: 65%;}</style>
</head>

<body>
<?php
    foreach ($newimageArr as $k => $v) {
        echo '<img src="'.$v[0].'" alt="'.date("d-m-Y",$k).'"/><br/>';
    }
?>
</body>
</html>
 
Liittynyt
08.02.2019
Viestejä
1 253
@pAy toteutus ei ole älyttömän vaikea kumpaankaan, mutta tulee aiheuttamaan tietyntyyppisen ongelma esimerkiksi siinä, että kun hakemistot on päivämäärien mukaan, niin tämä tarkoittaa 365 ladattavaa kuvaa / per vuosi, vaikka niistä lataisi aina vaan viimeisimmän. Eli jos tämä systeemi pyörisi neljä vuotta, niin sivulle latautuisi kerralla 1460 kuvaa. Toki jos kokorajoitus ylittyy ja nämä poistetaan niin ongelmaa ei välttämättä ole. Mistä päästäänkin toiseen koodiin ja kuviin kohdistuvaan delete operaatioon. Se menee paljon monimutkaisemmaksi, lähinnä että poistetaanko kokonaisia hakemistoja, jotka sisältää hakemistoja jne vai tiettyjä kuvia tms. Kyseinen koodi alkaa tällä hetkellä poistamaan yli 60pv vanhoja kuvia, kun hakemiston koko ylittää annetun arvon.
 
Viimeksi muokattu:
Liittynyt
03.07.2018
Viestejä
347
Eiköhän ihan tällainen toimisi:
SQL:
SELECT city, name, date_updated
FROM taulu
ORDER BY city ASC, date_updated DESC
Edit: lisätty koko kysely.
Tämä kysely järjestää pelkästään kaupungit ensin aakkosjärjestykseen ja sitten vasta ottaa huomioon päivämäärän, eli ei nosta ensimmäiseksi viimeksi muokattua kaupunkia jne.
 
Liittynyt
17.01.2018
Viestejä
1 998
Nyt on kyllä basic kysymys, mutta miten saa mysql:llä haettua listan niin että se on järjestetty päivämäärän mukaan uusimmasta vanhimpaan, mutta ensimmäisen jälkeen tuleekin perään heti kaikki muutkin saman kategorian merkinnät ja nekin uusimmasta vanhimpaan. Sitten listautuu toiseksi uusin kategoria jne..

Taulu on hyvin simppeli:
id = int
city = varchar, eli kategoria
name = varchar, listassa näkyvä nimi, ei vaikuta sorttaukseen
date_updated = datetime

eli

helsinki aaaa 2021-12-12
helsinki jkkjkj 2018-01-01
helsinki sdsdsd 2017-01-01
vantaa jjjjj 2021-12-11
vantaa kjjs 2021-12-10
kerava aaaa 2020-12-12
Yhdellä kyselyllä city + max pvm.
Se yhdistetään toiseen kyselyyn jossa haetaan näytettävät tiedot jolloin järjestyksessä voi käyttää max pvm, city, pvm ja pitäisi tulla oikea järjestys.
Vain idea nyt kun kirjoitan puhelimella.
 
Liittynyt
08.02.2019
Viestejä
1 253
Tämä kysely järjestää pelkästään kaupungit ensin aakkosjärjestykseen ja sitten vasta ottaa huomioon päivämäärän, eli ei nosta ensimmäiseksi viimeksi muokattua kaupunkia jne.
Aa sori, en huomannutkaan, että päivämäärän piti vielä järjestää myös kaupungit. Pitääkin katsoa, kun koneelle ehtii istahtaa...
 
Liittynyt
17.01.2018
Viestejä
1 998
Tässä idealle yksi toteutus, koko testi spoilerissa

SQL:
SELECT
    A.city,
    A.name,
    A.date_updated
FROM
    (
        SELECT city, max(date_updated) AS max_updated
        FROM A
        GROUP BY city
    ) SORTER,
    A
WHERE
    A.city = SORTER.city
ORDER BY
    SORTER.max_updated DESC,
    A.city ASC,
    A.date_updated DESC

Koodi:
CREATE TABLE A (
id int,
city varchar(255),
name varchar(255),
date_updated datetime
);

insert into A SELECT 1,'kerava', 'aaaa', '2020-12-12';
insert into A SELECT 2, 'helsinki', 'aaaa', '2021-12-12';
insert into A SELECT 3, 'vantaa', 'jjjjj', '2021-12-11';
insert into A SELECT 4, 'helsinki', 'sdsdsd', '2017-01-01';
insert into A SELECT 5, 'helsinki', 'jkkjkj', '2018-01-01';
insert into A SELECT 6, 'vantaa', 'kjjs', '2021-12-10';


SELECT * FROM A;
/*
id    city    name    date_updated
"1"    "kerava"    "aaaa"    "2020-12-12 00:00:00"
"2"    "helsinki"    "aaaa"    "2021-12-12 00:00:00"
"3"    "vantaa"    "jjjjj"    "2021-12-11 00:00:00"
"4"    "helsinki"    "sdsdsd"    "2017-01-01 00:00:00"
"5"    "helsinki"    "jkkjkj"    "2018-01-01 00:00:00"
"6"    "vantaa"    "kjjs"    "2021-12-10 00:00:00"
*/

SELECT
    A.city,
    A.name,
    A.date_updated
FROM
    (
        SELECT city, max(date_updated) AS max_updated
        FROM A
        GROUP BY city
    ) SORTER,
    A
WHERE
    A.city = SORTER.city
ORDER BY
    SORTER.max_updated DESC,
    A.city ASC,
    A.date_updated DESC
;

/*
city    name    date_updated
"helsinki"    "aaaa"    "2021-12-12 00:00:00"
"helsinki"    "jkkjkj"    "2018-01-01 00:00:00"
"helsinki"    "sdsdsd"    "2017-01-01 00:00:00"
"vantaa"    "jjjjj"    "2021-12-11 00:00:00"
"vantaa"    "kjjs"    "2021-12-10 00:00:00"
"kerava"    "aaaa"    "2020-12-12 00:00:00"
*/


SELECT
    A.city,
    A.name,
    A.date_updated
FROM
    (
        SELECT city, max(date_updated) AS max_updated
        FROM A
        GROUP BY city
    ) SORTER JOIN A ON (
        A.city = SORTER.city
    )
ORDER BY
    SORTER.max_updated DESC,
    A.city ASC,
    A.date_updated DESC
;

-- sama tulos kuin edellisellä
 

pAy

Liittynyt
15.08.2020
Viestejä
77
@pAy toteutus ei ole älyttömän vaikea kumpaankaan, mutta tulee aiheuttamaan tietyntyyppisen ongelma esimerkiksi siinä, että kun hakemistot on päivämäärien mukaan, niin tämä tarkoittaa 365 ladattavaa kuvaa / per vuosi, vaikka niistä lataisi aina vaan viimeisimmän. Eli jos tämä systeemi pyörisi neljä vuotta, niin sivulle latautuisi kerralla 1460 kuvaa. Toki jos kokorajoitus ylittyy ja nämä poistetaan niin ongelmaa ei välttämättä ole. Mistä päästäänkin toiseen koodiin ja kuviin kohdistuvaan delete operaatioon. Se menee paljon monimutkaisemmaksi, lähinnä että poistetaanko kokonaisia hakemistoja, jotka sisältää hakemistoja jne vai tiettyjä kuvia tms. Kyseinen koodi alkaa tällä hetkellä poistamaan yli 60pv vanhoja kuvia, kun hakemiston koko ylittää annetun arvon.
Tyhjennän kansiot parin kuukauden välein (siirrän koneelle) ihan manuaalisesti, eli tuo että on poistanut vanhat kuvat automaattisesti on ollut turha. Eli sitä ei tarvitse huomioida, pääasia että pääsivun koodi hakisi kansiosta cam10 uusimman kuvan ja tuolla cam10 kansiossa olisi koodin joka näyttää kaikkien alikansioidenkin kuvat.
 
Liittynyt
08.02.2019
Viestejä
1 253
Tyhjennän kansiot parin kuukauden välein (siirrän koneelle) ihan manuaalisesti, eli tuo että on poistanut vanhat kuvat automaattisesti on ollut turha. Eli sitä ei tarvitse huomioida, pääasia että pääsivun koodi hakisi kansiosta cam10 uusimman kuvan ja tuolla cam10 kansiossa olisi koodin joka näyttää kaikkien alikansioidenkin kuvat.
Ensimmäiseen kirjoittelin tällaisen. En jaksanut edes tota vanhaa muokata, kun se olisi taas mennyt juuri niin sekavaksi. Tämä pitäisi toimia kaikilla kameroilla, vaikka olisi kamera 56 listalla, etsii siis kaikki cam* hakemistot. Tämän jälkeen etsii viimeisen hakemiston (per kamera) jonka jälkeen niistä hakemistoista viimeiset kuvat (filteri on nyt sama .png .jpg .webp). En tätä nyt pääse toki muuten testaamaan, kuin sillä että tein omalle koneelle nopean hakemistorakenteen, joka näyttäisi ainakin Linuxissa toimivan ihan ok (ajoin siis tätä ihan komentorivillä en selaimessa, mutta pitäisi printata toimiva sivu lähes alkuperäisellä koodilla). Jätin myös ctimen käyttöön, koska sillä saattaa olla jollain alustalla jotain merkitystä.

PHP:
<?php
$dirs = glob(__DIR__ . '/cam*/????/??/??', GLOB_ONLYDIR);
$last_dirs = array();
$images = array();
natcasesort($dirs);
foreach( $dirs as $dir ) {
  $p = explode('/', $dir);
  $cam = array_slice($p, -4, 1)[0];
  $date = array_slice($p, -3);
  $last_dirs[$cam] = $cam . '/' . implode('/', $date);
}

foreach ($last_dirs as $cam => $last_dir) {
  $files = glob('{'.$last_dir.'/*.png,'.$last_dir.'/*.jpg,'.$last_dir.'/*.webp}', GLOB_BRACE);
  [$images[$cam], $ctime] = [null, 0];
  foreach ( $files as $file ) {
    $fctime = filectime($file);
    if ($fctime > $ctime)
      $images[$cam] = $file;
      $ctime = $fctime;
  }

}

header("Refresh: 300");
?>
<!DOCTYPE html>
<html lang="fi">
<head>
  <meta charset="utf-8">
  <title>Uusimmat kuvat</title>
  <style>
    img { width: 65%; }
    a { display: block; margin: 0.5rem; }
  </style>
</head>
<body>
<?php
foreach ($images as $cam => $img) {
  $src = $img ? htmlspecialchars($img) : "data:,x";
  echo "<a href='$cam'><img src='$src' alt='Kamera ".substr($cam, 3)."' /></a>";
}
?>
</body>
</html>
Tokaan voisi toimia ihan tällainen, tämäkin siis toimii millä tahansa kameralla, mutta pitää olla kameran hakemistossa. Myös sen tiedostojen poisto logiikan poistin tästä kokonaan, kun sille ei ole tarvetta. Näissä molemmissa käytän PHP:n glob funktioo ja luotan siihen, että niiden palauttamat tiedostot on olemassa, kun sivu ladataan. Glob ei ikävä kyllä tue täyttä regexpiä, joten sen tiedostofilterit joutuu kirjoittamaan vähän pidempään muotoon.
PHP:
<?php
$images = glob('{????/??/??/*.png,????/??/??/*.jpg,????/??/??/*.webp}', GLOB_BRACE);

$numberOfImages = 50; // How many images are shown

$imageArr = array();
foreach ( $images as $image ) {
  $imageArr[filectime($image)][] = $image;
}

krsort($imageArr);
$newimageArr=array_slice($imageArr, 0, $numberOfImages-1, true);

?>
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>autokatos</title>
  <style>img {width: 65%;}</style>
</head>

<body>
<?php
    foreach ($newimageArr as $k => $v) {
        echo '<img src="'.$v[0].'" alt="'.date("d-m-Y",$k).'"/><br/>';
    }
?>
</body>
</html>
Tosiaan molemmat testaamatta oikeilla kuvilla, web serverillä ja selaimella. ;)
 

pAy

Liittynyt
15.08.2020
Viestejä
77
:) Suuret kiitokset, kun viitsit nähdä noin paljon vaivaa! Testailen kun ehdin, nyt juuri muita kiireitä.
 
Liittynyt
03.07.2018
Viestejä
347
Tässä idealle yksi toteutus, koko testi spoilerissa

SQL:
SELECT
    A.city,
    A.name,
    A.date_updated
FROM
    (
        SELECT city, max(date_updated) AS max_updated
        FROM A
        GROUP BY city
    ) SORTER,
    A
WHERE
    A.city = SORTER.city
ORDER BY
    SORTER.max_updated DESC,
    A.city ASC,
    A.date_updated DESC

Koodi:
CREATE TABLE A (
id int,
city varchar(255),
name varchar(255),
date_updated datetime
);

insert into A SELECT 1,'kerava', 'aaaa', '2020-12-12';
insert into A SELECT 2, 'helsinki', 'aaaa', '2021-12-12';
insert into A SELECT 3, 'vantaa', 'jjjjj', '2021-12-11';
insert into A SELECT 4, 'helsinki', 'sdsdsd', '2017-01-01';
insert into A SELECT 5, 'helsinki', 'jkkjkj', '2018-01-01';
insert into A SELECT 6, 'vantaa', 'kjjs', '2021-12-10';


SELECT * FROM A;
/*
id    city    name    date_updated
"1"    "kerava"    "aaaa"    "2020-12-12 00:00:00"
"2"    "helsinki"    "aaaa"    "2021-12-12 00:00:00"
"3"    "vantaa"    "jjjjj"    "2021-12-11 00:00:00"
"4"    "helsinki"    "sdsdsd"    "2017-01-01 00:00:00"
"5"    "helsinki"    "jkkjkj"    "2018-01-01 00:00:00"
"6"    "vantaa"    "kjjs"    "2021-12-10 00:00:00"
*/

SELECT
    A.city,
    A.name,
    A.date_updated
FROM
    (
        SELECT city, max(date_updated) AS max_updated
        FROM A
        GROUP BY city
    ) SORTER,
    A
WHERE
    A.city = SORTER.city
ORDER BY
    SORTER.max_updated DESC,
    A.city ASC,
    A.date_updated DESC
;

/*
city    name    date_updated
"helsinki"    "aaaa"    "2021-12-12 00:00:00"
"helsinki"    "jkkjkj"    "2018-01-01 00:00:00"
"helsinki"    "sdsdsd"    "2017-01-01 00:00:00"
"vantaa"    "jjjjj"    "2021-12-11 00:00:00"
"vantaa"    "kjjs"    "2021-12-10 00:00:00"
"kerava"    "aaaa"    "2020-12-12 00:00:00"
*/


SELECT
    A.city,
    A.name,
    A.date_updated
FROM
    (
        SELECT city, max(date_updated) AS max_updated
        FROM A
        GROUP BY city
    ) SORTER JOIN A ON (
        A.city = SORTER.city
    )
ORDER BY
    SORTER.max_updated DESC,
    A.city ASC,
    A.date_updated DESC
;

-- sama tulos kuin edellisellä
Kiitos, tämä toimii hienosti!
 
Liittynyt
19.08.2018
Viestejä
743
Stanfordin yliopistolla oli joskus ainakin mooc tietokannoista. Siinä oli tehtäviä tietysti myös mukana. Jos se jostain löytyisi. https://online.stanford.edu/courses/soe-ydatabases-databases tuo on nykyään osissa. Voi olla, että siinä on mukana jostain syystä XML:ää ja sen kyselykieliä, mutta ne voi skippailla.
Tietty perus-Selectit löytyy esim. W3 Schoolsilta. Noilla on myös ilmaiset referenssitiedostot eri "murteille".
 
Liittynyt
01.01.2018
Viestejä
1 117
Ot, mutta vetääkö teillä tuo edellinen sivu android chromen ihan tukkoon?

 

pAy

Liittynyt
15.08.2020
Viestejä
77
Ensimmäiseen kirjoittelin tällaisen. En jaksanut edes tota vanhaa muokata, kun se olisi taas mennyt juuri niin sekavaksi. Tämä pitäisi toimia kaikilla kameroilla, vaikka olisi kamera 56 listalla, etsii siis kaikki cam* hakemistot. Tämän jälkeen etsii viimeisen hakemiston (per kamera) jonka jälkeen niistä hakemistoista viimeiset kuvat (filteri on nyt sama .png .jpg .webp). En tätä nyt pääse toki muuten testaamaan, kuin sillä että tein omalle koneelle nopean hakemistorakenteen, joka näyttäisi ainakin Linuxissa toimivan ihan ok (ajoin siis tätä ihan komentorivillä en selaimessa, mutta pitäisi printata toimiva sivu lähes alkuperäisellä koodilla). Jätin myös ctimen käyttöön, koska sillä saattaa olla jollain alustalla jotain merkitystä.

PHP:
<?php
$dirs = glob(__DIR__ . '/cam*/????/??/??', GLOB_ONLYDIR);
$last_dirs = array();
$images = array();
natcasesort($dirs);
foreach( $dirs as $dir ) {
  $p = explode('/', $dir);
  $cam = array_slice($p, -4, 1)[0];
  $date = array_slice($p, -3);
  $last_dirs[$cam] = $cam . '/' . implode('/', $date);
}

foreach ($last_dirs as $cam => $last_dir) {
  $files = glob('{'.$last_dir.'/*.png,'.$last_dir.'/*.jpg,'.$last_dir.'/*.webp}', GLOB_BRACE);
  [$images[$cam], $ctime] = [null, 0];
  foreach ( $files as $file ) {
    $fctime = filectime($file);
    if ($fctime > $ctime)
      $images[$cam] = $file;
      $ctime = $fctime;
  }

}

header("Refresh: 300");
?>
<!DOCTYPE html>
<html lang="fi">
<head>
  <meta charset="utf-8">
  <title>Uusimmat kuvat</title>
  <style>
    img { width: 65%; }
    a { display: block; margin: 0.5rem; }
  </style>
</head>
<body>
<?php
foreach ($images as $cam => $img) {
  $src = $img ? htmlspecialchars($img) : "data:,x";
  echo "<a href='$cam'><img src='$src' alt='Kamera ".substr($cam, 3)."' /></a>";
}
?>
</body>
</html>

Näyttää tuon uusimman kameran, jossa kuvat kansioissa päivämäärän mukaan, mutta ei näytä lainkaan kuvaa cam1-9 kansioista, joissa kuvat CAM kansioin juuressa.

edit: Tein cam4 kansion alle 2021 -> 9 -> 28 kansiot, mutta ei silti näytä sitä... täytyy tutkia lisää. --> pitää olla 09, eli kahdella merkillä.

edit: Tein kaksi kansiota joissa kummassakin 6kpl kuvia, cam4 kansiossa oleva koodi näyttää vain kaksi kuvaa, kummastakin kansiosta vanhimman.
 
Viimeksi muokattu:
Liittynyt
08.02.2019
Viestejä
1 253
Näyttää tuon uusimman kameran, jossa kuvat kansioissa päivämäärän mukaan, mutta ei näytä lainkaan kuvaa cam1-9 kansioista, joissa kuvat CAM kansioin juuressa.

edit: Tein cam4 kansion alle 2021 -> 9 -> 28 kansiot, mutta ei silti näytä sitä... täytyy tutkia lisää. --> pitää olla 09, eli kahdella merkillä.
Aa juu, oletin, että kaikki hakemistorakenteet ovat samat. Eli juu tuollaisenaan vaatii päivämäärä hakemistot 8 merkkisessä muodossa (esim. 2021/09/29).

edit: Tein kaksi kansiota joissa kummassakin 6kpl kuvia, cam4 kansiossa oleva koodi näyttää vain kaksi kuvaa, kummastakin kansiosta vanhimman.
Oikeastaan se mikä tulee mieleen, niin oleellisinta on varmasti se, että miten teit hakemistot ja miten siirsit niihin tiedostot. Jos kopioit tiedostot hakemistoihin siten, että ctime päivittyi kaikkiin samaksi, niin ainoastaan yksi kuva näytetään. Ctimea käytetään taulukon avaimena ja ajan mukaan järjestämiseen. Eli aikaisempi koodisi olettaa, että ctime on uniikki per kameran hakemisto (eli yksi kamera ei ota/tallenna kahta kuvaa samalla ajan hetkellä), käytin samaa olettamaa tässä.
 

pAy

Liittynyt
15.08.2020
Viestejä
77
Onko mahdollista tehdä sellaista koodia joka tarkastaisi kaikki alikansiot ja jos niihin ilmestynyt kuva niin siirtäisi sen juureen? Jos tuollainen olisi yksinkertaista tehdä niin sen voisi laittaa tuon uuden kameran kansioon ja muuten toimisi vanhat koodit.
 
Liittynyt
08.02.2019
Viestejä
1 253
Onko mahdollista tehdä sellaista koodia joka tarkastaisi kaikki alikansiot ja jos niihin ilmestynyt kuva niin siirtäisi sen juureen? Jos tuollainen olisi yksinkertaista tehdä niin sen voisi laittaa tuon uuden kameran kansioon ja muuten toimisi vanhat koodit.
Onko tässä mikä käyttöjärjestelmä kyseessä, missä nämä kuvat on?
 
Liittynyt
08.02.2019
Viestejä
1 253
Ok, eli Linux kone kyseessä. Kyllähän tolla koneella voisi myös varmasti ajaa cronissa komennon, joka siirtelee tiedostoja paikasta toiseen. Toki tämän kanssa saattaa päätyä myös tilanteeseen, että se alkuperäinen koodi näyttää vain yhden kuvan siitä joukosta, jolle ctime on päivitetty samaksi kopioidessa tiedostoja. Eli tiedostot pitäisi kopioida aika järjestyksessä yksitellen, jotta PHP-scripti osaa näyttää ne oikein.

Toinen vaihtoehto on toki käyttää cp komennon --preserve parametriä, jotta alkuperäiset timestampit säilyisi. Myös rsync voisi olla yksi vaihtoehto, niin silloin ei tarvitsisi itse tehdä mitään monimutkaista logiikkaa hakemistosta toiseen siirtelyyn.

Luoko kamera 10 uniikkeja tiedostonimiä niihin päivämäärä hakemistoihin?
 
Liittynyt
08.02.2019
Viestejä
1 253
Alku näyttäisi olevan aina sama ja loppu vuosi...sekunnit.

Reo_00_20210928133051.jpg
Ok, eli uniikkeja on, eli seuraava komento pitäisi lisätä croniin käyttäjälle, jolla on oikeus noihin kuviin:
Bash:
cd ~/hakemisto/josta/kuvat/löytyy/cam10/;shopt -s nullglob;cp -pn ????/??/??/*.{png,jpg,webp} .
Crontab:issa näyttäisi tältä, eli ajetaan joka minuutti, cp säilyttää ainakin sen päivämäärän ja ei ylikirjoita vanhoja:
Bash:
* * * * * cd ~/hakemisto/josta/kuvat/löytyy/cam10/;shopt -s nullglob;cp -pn ????/??/??/*.{png,jpg,webp} .
 

pAy

Liittynyt
15.08.2020
Viestejä
77
Ok, eli uniikkeja on, eli seuraava komento pitäisi lisätä croniin käyttäjälle, jolla on oikeus noihin kuviin:
Bash:
cd ~/hakemisto/josta/kuvat/löytyy/cam10/;shopt -s nullglob;cp -pn ????/??/??/*.{png,jpg,webp} .
Crontab:issa näyttäisi tältä, eli ajetaan joka minuutti, cp säilyttää ainakin sen päivämäärän ja ei ylikirjoita vanhoja:
Bash:
* * * * * cd ~/hakemisto/josta/kuvat/löytyy/cam10/;shopt -s nullglob;cp -pn ????/??/??/*.{png,jpg,webp} .
Tuo menee kyllä yli osaamiseni, Plesk:stä löytyy ajoitetut tehtävät kohta, mutta en tiedä onko se oikea vai miten tuo pitäisi lisätä?
 
Liittynyt
08.02.2019
Viestejä
1 253
Tuo menee kyllä yli osaamiseni, Plesk:stä löytyy ajoitetut tehtävät kohta, mutta en tiedä onko se oikea vai miten tuo pitäisi lisätä?
Uskoisin että se toimii, pystykö laittamaan vaikka screenshotin, että miltä se ajoitetut tehtävät näyttää?
 
Liittynyt
08.02.2019
Viestejä
1 253
Jeps pitäisi onnistua tuolla. Eli komento kohtaan "cd ~/hakemisto/josta/kuvat/löytyy/cam10/;shopt -s nullglob;cp -pn ????/??/??/*.{png,jpg,webp} ." Hakemisto, mistä se cam10 löytyy pitää muuttaa oikeaksi eli se voi olla tapauksessasi muotoa /home/username/cam10/ tai mitä ikinä, huomaa myös että komento päättyy välilyöntiin ja pisteeseen ja nämä pitää olla mukana. Uskoisin, että toi käyttöliittymä ei tarvitse lainausmerkkejä. Sitten siihen suorita kohtaan se Cron-tyyli ja "* * * * *" eli viisi tähteä väleillä. Ilmoitukset ehkä virheistä, jos haluat. Sitten voi kokeilla ajaa suorita nyt, jotta näkee siirtyykö kuvat.

Laitetaan vielä selitys, että mitä oneliner tekee, jos tätä haluat joskus muokata tms., siinä on siis kolme komentoa:
cd ~/hakemisto/josta/kuvat/löytyy/cam10/ <-- vaihtaa hakemiston oikeaksi
shopt -s nullglob <--hiljentää ei mätchäävät copy komennot
cp -pn ????/??/??/*.{png,jpg,webp} . <-- kopio vuosi/kk/päivä hakemistoista listatut kuvatyypit cam10 juureen säilyttäen niiden alkuperäisin päivämäärän ja skippaa myös jo löytyvät kuvat.
 

pAy

Liittynyt
15.08.2020
Viestejä
77
Jeps pitäisi onnistua tuolla. Eli komento kohtaan "cd ~/hakemisto/josta/kuvat/löytyy/cam10/;shopt -s nullglob;cp -pn ????/??/??/*.{png,jpg,webp} ." Hakemisto, mistä se cam10 löytyy pitää muuttaa oikeaksi eli se voi olla tapauksessasi muotoa /home/username/cam10/ tai mitä ikinä, huomaa myös että komento päättyy välilyöntiin ja pisteeseen ja nämä pitää olla mukana. Uskoisin, että toi käyttöliittymä ei tarvitse lainausmerkkejä. Sitten siihen suorita kohtaan se Cron-tyyli ja "* * * * *" eli viisi tähteä väleillä. Ilmoitukset ehkä virheistä, jos haluat. Sitten voi kokeilla ajaa suorita nyt, jotta näkee siirtyykö kuvat.

Laitetaan vielä selitys, että mitä oneliner tekee, jos tätä haluat joskus muokata tms., siinä on siis kolme komentoa:
cd ~/hakemisto/josta/kuvat/löytyy/cam10/ <-- vaihtaa hakemiston oikeaksi
shopt -s nullglob <--hiljentää ei mätchäävät copy komennot
cp -pn ????/??/??/*.{png,jpg,webp} . <-- kopio vuosi/kk/päivä hakemistoista listatut kuvatyypit cam10 juureen säilyttäen niiden alkuperäisin päivämäärän ja skippaa myös jo löytyvät kuvat.
Tuollaista virhettä vielä antaa, sama polun alku toimii ainakin .htaccess tiedostossa, miksei tässä?


-: line 0: cd: //vol-1/*oma tunnus*/httpdocs/cam10/: No such file or directory
cp: missing destination file operand after '.'
Try 'cp --help' for more information.
 
Liittynyt
08.02.2019
Viestejä
1 253
Tuollaista virhettä vielä antaa, sama polun alku toimii ainakin .htaccess tiedostossa, miksei tässä?


-: line 0: cd: //vol-1/*oma tunnus*/httpdocs/cam10/: No such file or directory
cp: missing destination file operand after '.'
Try 'cp --help' for more information.
Hmm. Sinne vol-1 eteen kuuluisi vaan yksi kauttaviiva, mutta nopealla testauksella tuskin johtuu tästäkään. Toimisikohan ihan "cd ~/httpdocs/cam10/"

Jos ei tollakaan lähde, niin tee uusi croni muuten sama, mutta komentona pelkkä:
pwd

Ja ilmoitukset jokaisesta suorituksesta, niin saat tietää hakemiston mistä lähdetään.

Teoriassa mietin, olisiko jostain syystä oikeuksissa ongelma, että cron käyttäjä ei näe oikeaa polkua, tämä tuntuisi kyllä todella oudolta...
 

pAy

Liittynyt
15.08.2020
Viestejä
77
Hmm. Sinne vol-1 eteen kuuluisi vaan yksi kauttaviiva, mutta nopealla testauksella tuskin johtuu tästäkään. Toimisikohan ihan "cd ~/httpdocs/cam10/"

Jos ei tollakaan lähde, niin tee uusi croni muuten sama, mutta komentona pelkkä:
pwd

Ja ilmoitukset jokaisesta suorituksesta, niin saat tietää hakemiston mistä lähdetään.

Teoriassa mietin, olisiko jostain syystä oikeuksissa ongelma, että cron käyttäjä ei näe oikeaa polkua, tämä tuntuisi kyllä todella oudolta...
En tiedä mistä toisen kauttaviivan lisäsi virheilmoitukseen. Ei toimi "cd ~/httpdocs/cam10/" -->

cp: missing destination file operand after '.'
Try 'cp --help' for more information.

Komentona pwd -->
Tehtävä "pwd" suoritettu onnistuneesti 0 sekunnissa, tulos:
/
 
Liittynyt
08.02.2019
Viestejä
1 253
En tiedä mistä toisen kauttaviivan lisäsi virheilmoitukseen. Ei toimi "cd ~/httpdocs/cam10/" -->

cp: missing destination file operand after '.'
Try 'cp --help' for more information.

Komentona pwd -->
Tehtävä "pwd" suoritettu onnistuneesti 0 sekunnissa, tulos:
/
Komentorivillä tämän saisi toimivaan toki helpoiten, mutta eipä tossa auta, kun ottaa nippu listauksia, jotta voisi ymmärtää, että mistä se cam10 löytyy. Eli kirjoita siihen komennoksi vielä "ls -la", niin näkee, että mitä hakemistoja löytyy siitä kohdasta.
 

pAy

Liittynyt
15.08.2020
Viestejä
77
Komentorivillä tämän saisi toimivaan toki helpoiten, mutta eipä tossa auta, kun ottaa nippu listauksia, jotta voisi ymmärtää, että mistä se cam10 löytyy. Eli kirjoita siihen komennoksi vielä "ls -la", niin näkee, että mitä hakemistoja löytyy siitä kohdasta.
Tukee laitoin kysymyksen, mutta vastauksessa voi mennä aikaa näin viikonloppuna.

Tuossa kaikki mitä tulee näkyviin,


total 84
drwx--x--- 21 *oma tunnus* psaserv 4096 Oct 2 06:44 .
drwx--x--- 21 *oma tunnus* psaserv 4096 Oct 2 06:44 ..
drwx------ 2 *oma tunnus* psacln 4096 Aug 21 14:43 .cache
drwxr-xr-x 3 *oma tunnus* psacln 4096 Aug 21 21:06 .composer
drwx------ 3 *oma tunnus* psacln 4096 Aug 21 14:43 .gnupg
drwxr-xr-x 3 *oma tunnus* psacln 4096 Aug 29 06:53 .htpasswd
drwxr-xr-x 2 *oma tunnus* psacln 4096 Oct 2 05:48 .ssh
drwxr-xr-x 2 *oma tunnus* psacln 4096 Aug 27 04:55 .trash
drwxr-xr-x 2 root root 4096 Oct 2 06:44...
 

jad

Liittynyt
22.10.2016
Viestejä
1 210
Tämä haiskahtaa siltä, että cron on chorootattu kotihakemistoon, joten joku /public_html/cam10/ saattaisi osua aika lähelle oikeata polkua.
 
Liittynyt
08.02.2019
Viestejä
1 253
Tukee laitoin kysymyksen, mutta vastauksessa voi mennä aikaa näin viikonloppuna.

Tuossa kaikki mitä tulee näkyviin,


total 84
drwx--x--- 21 *oma tunnus* psaserv 4096 Oct 2 06:44 .
drwx--x--- 21 *oma tunnus* psaserv 4096 Oct 2 06:44 ..
drwx------ 2 *oma tunnus* psacln 4096 Aug 21 14:43 .cache
drwxr-xr-x 3 *oma tunnus* psacln 4096 Aug 21 21:06 .composer
drwx------ 3 *oma tunnus* psacln 4096 Aug 21 14:43 .gnupg
drwxr-xr-x 3 *oma tunnus* psacln 4096 Aug 29 06:53 .htpasswd
drwxr-xr-x 2 *oma tunnus* psacln 4096 Oct 2 05:48 .ssh
drwxr-xr-x 2 *oma tunnus* psacln 4096 Aug 27 04:55 .trash
drwxr-xr-x 2 root root 4096 Oct 2 06:44...
Näyttäisi listaus loppuvan kesken eli ei varmaan printtaa kaikkea tohon, mutta se mitä @jad sanoi on varmaan totuus, eli "cd /httpdocs/cam10/" voisi toimia. Jos tämä aiemmin kyseisellä polulla käytössä.
 

pAy

Liittynyt
15.08.2020
Viestejä
77
Tämä haiskahtaa siltä, että cron on chorootattu kotihakemistoon, joten joku /public_html/cam10/ saattaisi osua aika lähelle oikeata polkua.
Tuossa ylempänä tuota jo kokeilin /httpdocs/cam10/ eikä toiminut, mutta nyt sillä meni läpi ja tiedostoista sirtyi kopiot cam10 juureen, en tiedä mikä oli pielessä aiemmin. Onko vaikea muuttaa niin, että alkuperäiset kuvat poistuvat samalla kun siirtyy eli ei kopioina?
 
  • Tykkää
Reactions: jad
Liittynyt
08.02.2019
Viestejä
1 253
Tuossa ylempänä tuota jo kokeilin /httpdocs/cam10/ eikä toiminut, mutta nyt sillä meni läpi ja tiedostoista sirtyi kopiot cam10 juureen, en tiedä mikä oli pielessä aiemmin.
Siinä oli tarkoituksella ~ (tilde) edessä, kun ajattelin että on käyttäjän kotihakemisto, joten cd komento oli eri... Hyvä jos alkoi toimimaan, nyt voit tosiaan laittaa sen pyörimään minuutin välein, niin siirtyy kuvat automaattisesti oikeaan paikkaan.
 

pAy

Liittynyt
15.08.2020
Viestejä
77
nyt voit tosiaan laittaa sen pyörimään minuutin välein, niin siirtyy kuvat automaattisesti oikeaan paikkaan.
Mitenkäs se sitten tapahtuu, kun siinä on valittuna nyt suorita: cron-tyyli, muita vaihtoehtoja on sitten tunneittain, päivittäin, viikottain, kuukausittain...

Onko vaikea muuttaa niin, että alkuperäiset kuvat poistuvat samalla kun siirtyy eli ei kopioina?
 
Liittynyt
08.02.2019
Viestejä
1 253
Mitenkäs se sitten tapahtuu, kun siinä on valittuna nyt suorita: cron-tyyli, muita vaihtoehtoja on sitten tunneittain, päivittäin, viikottain, kuukausittain...
Eli Cron tyyli ja ne viisi tähteä väleillä, eli "* * * * *"

Onko vaikea muuttaa niin, että alkuperäiset kuvat poistuvat samalla kun siirtyy eli ei kopioina?
move (mv) ei tue preserve optiota, joten ainoa vaihtoehto on ajaa näille kaikille myös delete. Tähän pitäisi kyllä jo lisätä joku ihan eri koodi, joka esimerkiksi listaa päivittäin siirtyneet kuvat (ja tarkistaa jopa niiden hashit) ja poistaa ne kansioistaan. Vaikka rm komento toimisi yhtä helposti, niin itse en suosittele tällä samalla komennolla poistoa, koska jos kopioinnissa tapahtuu jotain, niin alkuperäiset kuvat saattaa kadota ikiajoiksi.
 

pAy

Liittynyt
15.08.2020
Viestejä
77
Eli Cron tyyli ja ne viisi tähteä väleillä, eli "* * * * *"


move (mv) ei tue preserve optiota, joten ainoa vaihtoehto on ajaa näille kaikille myös delete. Tähän pitäisi kyllä jo lisätä joku ihan eri koodi, joka esimerkiksi listaa päivittäin siirtyneet kuvat (ja tarkistaa jopa niiden hashit) ja poistaa ne kansioistaan. Vaikka rm komento toimisi yhtä helposti, niin itse en suosittele tällä samalla komennolla poistoa, koska jos kopioinnissa tapahtuu jotain, niin alkuperäiset kuvat saattaa kadota ikiajoiksi.
Ok. Poisto onnistuu kyllä manuaali deletellä. :thumbsup: Kiitos taas!
 
Liittynyt
08.02.2019
Viestejä
1 253
Ok. Poisto onnistuu kyllä manuaali deletellä. :thumbsup: Kiitos taas!
Laitetaan nyt vielä scripti, jolla voisi myös poistella näitä vanhoja kuvia:
Bash:
#!/bin/bash

files=$(find . -mindepth 3 -mtime +2 -a \( -name "*.jpg" -o -name "*.png" -o -name "*.wepb" \))

if [ ! "${files[@]}" ]
then
  echo "No files found"
  exit
fi

for file1 in "${files[@]}"
do
  file2="./$(basename $file1)"
  if ! cmp "$file1" "$file2"
  then
    echo "$file1 mismatch on $file2"
  else
    rm $file1
    echo "deleted $file1"
  fi
done
Sama lyhennettynä onelinerina voi laittaa croniin pyörimään, vaikka päivittäin:
Bash:
cd /httpdocs/cam10/;find . -mindepth 3 -mtime +2 -a \( -name "*.jpg" -o -name "*.png" -o -name "*.wepb" \) |while read file1; do file2="./$(basename $file1)"; if ! cmp "$file1" "$file2"; then echo "$file1 mismatch on $file2"; else rm $file1; echo "deleted $file1"; fi; done
Eli find komento etsii kaikki tiedostot, jotka ovat 2 päivää vanhoja ja päätteet täsmää, sen jälkeen löytyneille tiedostoille suoritetaan cmp (byte by byte) chekki ja jos mätchää, niin siellä alihakemistoissa oleva versio poistetaan.

Itse testasin tämän omassa nopeasti kyhätyssä ympäristössä, mutta suosittelen testaamaan vielä, vaikka jollain backup / kopio hakemistolla, jotta mitään kummia ei tapahdu, koska kyseinen komento ajaa kuitenkin loopissa rm-komentoa.
 
Liittynyt
03.08.2019
Viestejä
370
Hyvin simppeli webbikikkura pitäisi tehdä, enkä ole kajonnut merkintäkielten maailmaan aikoihin.

Kuinka tehdä CSS:llä ehdollinen näkyvyys joka perustuu toisen luokan/classin nimen olemassaoloon sivulla?

<div class X>
Jotain sisältöä
</div>

<div class Y>
Jotain sisältöä, joka näkyy ainoastaan jos "class X" on näkyvillä.
</div>

Avainsanat ratkaisuun googletukseen? Onko edes mahdollista CSS kikkailulla vai vaatiiko skriptiä? (Alustassa bootstrap 4)
 
Liittynyt
18.10.2016
Viestejä
69
Hyvin simppeli webbikikkura pitäisi tehdä, enkä ole kajonnut merkintäkielten maailmaan aikoihin.

Kuinka tehdä CSS:llä ehdollinen näkyvyys joka perustuu toisen luokan/classin nimen olemassaoloon sivulla?

<div class X>
Jotain sisältöä
</div>

<div class Y>
Jotain sisältöä, joka näkyy ainoastaan jos "class X" on näkyvillä.
</div>

Avainsanat ratkaisuun googletukseen? Onko edes mahdollista CSS kikkailulla vai vaatiiko skriptiä? (Alustassa bootstrap 4)
Jos elementeillä on yhteinen parent element ja ehtona on nimenomaan edellä olevan elementin olemassaolo (ei näkyvyys), niin voit käyttää tätä: General sibling combinator - CSS: Cascading Style Sheets | MDN
 
Liittynyt
03.08.2019
Viestejä
370
Jos elementeillä on yhteinen parent element ja ehtona on nimenomaan edellä olevan elementin olemassaolo (ei näkyvyys), niin voit käyttää tätä: General sibling combinator - CSS: Cascading Style Sheets | MDN
Kiitos vinkistä. Tämäkin uutta.

Itseasiassa pulikat ovat sivulla aika "kaukana" toisistaan, joten taitaa olla vaikea paikka ilman jotain skriptiä tai muuta systeemiä jota tämä alusta ei taida tukea tietoturvallisuuden nimissä "wysiwyg" sisällöissä.
 
Liittynyt
28.04.2020
Viestejä
47
Onnistuuko näin, jos luokka X on display: none; niin myöskään luokka X.y ei näy:
HTML:
<!DOCTYPE html>
<html lang="fi">
<head>
<meta charset="utf-8" />
<title>nimetön</title>
<style>
.X {
  border: 5px outset red;
  background-color: lightblue;
  text-align: center;
  display: none;
}

.X.y {
  border: 5px outset red;
  background-color: lightblue;
  text-align: center;
}

</style>
</head><body>

   <div class="X">
     <h2>Class X</h2>
   </div>

   <div class="y">
     <h2>Class y</h2>
   </div>

   <div class="X > y">
     <h2>Class X.y</h2>
   </div>

</body></html>
 
Liittynyt
03.08.2019
Viestejä
370
Onnistuuko näin, jos luokka X on display: none; niin myöskään luokka X.y ei näy:
HTML:
<!DOCTYPE html>
<html lang="fi">
<head>
<meta charset="utf-8" />
<title>nimetön</title>
<style>
.X {
  border: 5px outset red;
  background-color: lightblue;
  text-align: center;
  display: none;
}

.X.y {
  border: 5px outset red;
  background-color: lightblue;
  text-align: center;
}

</style>
</head><body>

   <div class="X">
     <h2>Class X</h2>
   </div>

   <div class="y">
     <h2>Class y</h2>
   </div>

   <div class="X > y">
     <h2>Class X.y</h2>
   </div>

</body></html>
Sehän toimii just näin ja on sovellettavissa omaan tarpeeseen. Mietin liian monimutkaisesti / en hoksannut. Kiitos tuhannesti sinne!
 
Toggle Sidebar

Statistiikka

Viestiketjut
237 472
Viestejä
4 163 295
Jäsenet
70 412
Uusin jäsen
O&G

Hinta.fi

Ylös Bottom