Avatar billede mibu Nybegynder
09. november 2009 - 21:00 Der er 5 kommentarer og
2 løsninger

includer en side som resten af siderne

Jeg er ved at lave en galleriside der skal implementeres med resten af mit design.

I min menu linker jeg til nye sider på denne måde:
<a href="index.php?side=link" class="menu">Link</a>

Nu har jeg fundet et galleriscript der har de funktioner jeg søger, men det kaldes ved at linke f.eks. /images/billeder/ i denne sidste mappe ligger så galleri scriptet der hedder "index.php". scriptet viser så alle undermapper i "billeder" som billedikon der kan trykkes på, hvorefter den valgt mappe lukkes op og alle billeder kan ses som ikoner, der igen kan trykkes på.

Mit spørgsmål er nu, hvordan får jeg lavet så galleri-scriptet overholder mit øvrige design. jeg har bølet temmelig meget med det, og jeg tror det er noget med scripter kalder
"print_doc_start" og "print_doc_end" men jeg har prøvet på 50 forskellige måder at omgå det, men mit bedste skud viste ingen billeder.

GALLERI SCRIPT:

<?
  // ----------- KONFIGURATION ------------

  define(GALLERY_ROOT, "./");
  define(THUMB_ROOT, "");
  define(SAVE_THUMBS, TRUE);
  define(GALLERY_NAME, "");
  $home_text = "Oversigt";
  $gallery_header = "Album";
  $sub_gallery_header = "Vælg fotoalbum";
  $split_dir_img = TRUE;
  define(THUMB_MAX_WIDTH, 160);
  define(THUMB_MAX_HEIGHT, 160);
  $table_border_width = 1;
  $thumb_border_width = 1;
  $thumb_td_padding = 7;
  $thumb_td_spacing = 15;
  $thumb_td_border_width = 1;
  define(HIGH_QUALITY_THUMB, TRUE);
  $dir_underscore_as_space = TRUE;
  $image_in_new_window = TRUE;
  $click_image = "- Tryk p&aring; billedet for at lukke. -";
  $window_extra_width = 80;
  $window_extra_height = 133;
  $text_height = 16;
  $scrollbar_width = 17;
  $use_java = TRUE;
  $show_image_name = TRUE;
  $show_dir_name = TRUE;
  $show_alt_description = TRUE;
  $gallery_description_file = "_desc.txt";
  $gallery_name_file = "_name.txt";
  $gallery_columns = 3;
  $sort_divider = "--";
  $color_body_back = "ffffff";
  $color_body_text = "#000000";
  $color_link = "#000000";
  $color_link_hover = "#FF0000";
  $color_thumb_border = "#666666";
  $color_thumb_td_border = "#666666";
  $color_thumb_td = "#ffffff";
  $color_dir_thumb_border = "#666666";
  $color_dir_thumb_td_border = "#666666";
  $color_dir_thumb_td = "#ffffff";
  $color_table_back = "#ffffff";
  $color_table_text = "#000000";
  $color_table_border = "#000000";
  $color_table_header = "#ffffff";
  $color_table_header_text = "#000000";
  $color_table_sub_header = "#ffffff";
  $color_table_sub_header_text = "#000000";
  $color_table_desc = "#ffffff";
  $color_table_desc_text = "#000000";

  // --------------------------------------


  function print_doc_start($head="", $body="") {
    echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"><html><head><link rel=\"stylesheet\" type=\"text/css\" href=\"".$_SERVER[PHP_SELF]."?cmd=css\"><meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"><title>".htmlentities(GALLERY_NAME)."</title>".$head."</head><body".$body.">";
  }


  function print_doc_end() {
    echo "</body></html>";
  }


  function makedir($path) {
    $dirs=array();
    $dirs=explode("/",$path);
    $path=THUMB_ROOT;
    foreach ($dirs as $element) {
      $path.=$element."/";
      if(!is_dir($path)) {
        mkdir($path);
      }
    }
  }


  function image_type_ok($file) {
    $type = strtolower(substr($file, strrpos($file, ".")));
    if ($type==".jpg" or $type==".jpeg") {
      return TRUE;
    } else {
      return FALSE;
    }
  }


  function file_ok($file) {
    if (!image_type_ok($file)) { return FALSE; }
    if (!file_exists($file)) { return FALSE; }
    return TRUE;
  }


  function print_thumb($image_dir, $image_file) {
    if (THUMB_ROOT!="") {
      $thumb_file = THUMB_ROOT.$image_dir.$image_file;
    } else {
    $thumb_file = "";
    }
    if(file_ok($thumb_file)) {
      $file_pointer=fopen($thumb_file, "rb");
      header("Content-type: image/jpeg");
      fpassthru($file_pointer);
      fflush();
    } else {
      if(image_type_ok($image_file)) {
        if (!$image = imagecreatefromjpeg(GALLERY_ROOT.$image_dir.$image_file)) {
          exit;
        }
      } else {
        exit;
      }
      $image_size = getimagesize(GALLERY_ROOT.$image_dir.$image_file);
      $image_width = $image_size[0];
      $image_height = $image_size[1];
      $aspect_x = $image_width / THUMB_MAX_WIDTH;
      $aspect_y = $image_height / THUMB_MAX_HEIGHT;
      if ($aspect_x > $aspect_y) {
        $thumb_width = THUMB_MAX_WIDTH;
        $thumb_height = $image_height / $aspect_x;
      } else {
        $thumb_height = THUMB_MAX_HEIGHT;
        $thumb_width = $image_width / $aspect_y;
      }
      $thumb = @imagecreatetruecolor($thumb_width, $thumb_height);
      if (HIGH_QUALITY_THUMB) {
        imagecopyresampled($thumb,$image,0,0,0,0,$thumb_width,$thumb_height,imagesx($image),imagesy($image));
      } else {
        imagecopyresized($thumb,$image,0,0,0,0,$thumb_width,$thumb_height,imagesx($image),imagesy($image));
      }
      imagedestroy($image);
      if (SAVE_THUMBS and (THUMB_ROOT!="")) {
        if (!is_dir(THUMB_ROOT.$image_dir)) {
          makedir($image_dir);
        }
        imagejpeg($thumb, $thumb_file);
      }
      header("Content-type: image/jpeg");
      imagejpeg($thumb);
      imagedestroy($thumb);
    }
  }


  function get_file($file_to_print, $only_first_line=FALSE, $br_for_new_line=TRUE) {
    if ($lines = @file($file_to_print)) {
      reset($lines);
      if ($only_first_line) {
        return htmlentities($lines[0]);
      } else {
        $result="";
        while (list($key, $line) = each($lines)) {
          $result.=($result!="" ? ($br_for_new_line ? "<br>" : "") : "").htmlentities($line);
        }
      }
    } else {
      return "";
    }
    return $result;
  }


  function get_first_image($image_dir) {
    $directory_handle = opendir(GALLERY_ROOT.$image_dir);
    $dirs = array();
    $files = array();
    while($var = readdir($directory_handle)) {
      if (is_dir(GALLERY_ROOT.$image_dir.$var) and $var!="." and $var!="..") {
        $dirs[] = $var;
      } elseif (!is_dir(GALLERY_ROOT.$image_dir.$var) and (image_type_ok($var)) ) {
        $files[] = $var;
      }
    }
    sort ($dirs);
    reset ($dirs);
    sort ($files);
    reset ($files);
    if (isset($files[0])) {
      $result = array("dir"=>$image_dir, "file"=>$files[0]);
      return $result;
    } else {
      foreach ($dirs as $subdir) {
        $subresult = get_first_image($image_dir.$subdir."/");
        if (isset($subresult[file])) {
          return $subresult;
        }
      }
    }
  }


  function repeat_string($str, $times) {
    for ($i=1; $i<=$times; $i++) {
      echo $str;
    }
  }


  if ($_GET[cmd]=="css") {
    header("Content-type: text/css");
    echo "
    body {
        background : $color_body_back;
        color: $color_body_text;
        font-family: Verdana;
        font-size: 14px;
        font-weight: normal;
        text-align : center;
        margin : 15px;
    }

    a:active,a:link,a:visited,a:focus {
        color: $color_link;
        font-weight: normal;
        text-decoration : none;
    }

    a:hover {
        color : $color_link_hover;
    }

    small {
        font-size: 10px;
        font-weight: normal;
    }

    table.outer {
        border : ".$table_border_width."px solid $color_table_border;
        background : $color_table_back;
        color: $color_table_text;
        font-size: 14px;
        text-align : center;
        vertical-align : top;
        margin : 0px;
        padding : 0px;
    }

    table.outer td {
        border : none;
        color: $color_table_text;
        padding : 5px;
    }

    table.outer td.img {
        border : ".$thumb_td_border_width."px solid $color_thumb_td_border;
        background : $color_thumb_td;
        padding : ".$thumb_td_padding."px;
    }

    table.outer td.dir {
        border : ".$thumb_td_border_width."px solid $color_dir_thumb_td_border;
        background : $color_dir_thumb_td;
        padding : ".$thumb_td_padding."px;
    }

    table.outer td.empty {
        border : none;
        background : $color_table_back;
        padding : 0px;
    }

    table.outer td.desc {
        background : $color_table_desc;
        color: $color_table_desc_text;
    }

    table.outer th {
        border : none;
        background : $color_table_header;
        color: $color_table_header_text;
        font-size: 35px;
        font-weight: bold;
        text-align : center;
        padding : 5px;
    }

    table.outer th.sub {
        border : none;
        background : $color_table_sub_header;
        color: $color_table_sub_header_text;
        font-size: 14px;
        font-weight: normal;
        text-align : left;
        padding : 1px 1px 1px 10px;
    }

    img.dir {
        border : ".$thumb_border_width."px solid $color_dir_thumb_border;
        margin : 0px;
    }

    img.thumb {
        border : ".$thumb_border_width."px solid $color_thumb_border;
        margin : 0px;
    }

    img.full {
        border: none;
        margin : 10px;
    }
    ";
    exit;
  }


  $gallery = trim($_GET[gallery]);
  $image = trim($_GET[image]);
  if(strpos($gallery.$image, "..")!==FALSE) {
    exit("Album eller billedet er ikke tilg&aelig;!");
  }


  if ($_GET[cmd]=="thumb") {
    print_thumb($gallery, $image);
    exit;
  }


  if ($_GET[cmd]=="dirthumb") {
    $first_image = get_first_image($gallery);
    print_thumb($first_image[dir], $first_image[file]);
    exit;
  }


  if ($_GET[cmd]=="imageform") {
    $image_file=GALLERY_ROOT.$gallery.$image;
    $description_file = substr($image_file, 0, strrpos($image_file, ".")).".txt";
    $desc = get_file($description_file);
    $text_space = substr_count(strtolower($desc), "<br>") * $text_height;
    if ($desc) {
      $text_space += $text_height;
    }
    if ($click_image != "") {
      $text_space += $text_height;
    }
    if ($use_java and $image_in_new_window) {
      $add_to_head ="<script language=\"JavaScript\" TYPE=\"text/javascript\">
      <!--
      function windowchange() {
        var posx,posy,width,height;
        self.focus();
        if (document.images) {
          width = document.images['fullimage'].width+".$window_extra_width.";
          height = document.images['fullimage'].height+".($window_extra_height+$text_space).";
          if (width > window.screen.availWidth) { width = window.screen.availWidth; height=height+".$scrollbar_width."; }
          if (height > window.screen.availHeight) { height = window.screen.availHeight; width=width+".$scrollbar_width."; }
          if (width > window.screen.availWidth) width = window.screen.availWidth;
          posx = (window.screen.availWidth-width) / 2;
          posy = (window.screen.availHeight-height) / 2;
          window.moveTo(0,0);
          window.resizeTo(width,height);
          window.moveTo(posx,posy);
          window.focus();
        }
        return true;
      }
      //-->
      </script>";
    } else {
      $add_to_head ="";
    }
    print_doc_start($add_to_head, (($use_java and $image_in_new_window) ? " OnLoad=\"java script:windowchange();\"" : ""));
    if (!($image_in_new_window and !$use_java)) {
      echo "<a href=\"".($image_in_new_window ? ($use_java ? "java script:window.close()" : "") : ($use_java ? "java script:history.go(-1)" : $_SERVER[PHP_SELF]."?gallery=".$gallery))."\">";
    }
    echo "<img id=\"fullimage\" alt=\"\" class=\"full\" src=\"".$_SERVER[PHP_SELF]."?cmd=image&amp;gallery=".$gallery."&amp;image=".$image."\">";
    if ($click_image != "") {
      echo "<br><small>".$click_image."</small>";
    }
    if (!($image_in_new_window and !$use_java)) {
      echo "</a>";
    }
    if ($desc) {
      echo "<br>".$desc;
    }
    print_doc_end();
    exit;
  }


  if ($_GET[cmd]=="image") {
    $image_file = GALLERY_ROOT.$gallery.$image;
    if(file_ok($image_file)) {
      $file_pointer=fopen($image_file, "rb");
      header("Content-type: image/jpeg");
      header("Content-Disposition: inline; filename=".$image);
      fpassthru($file_pointer);
      fflush();
    }
    exit;
  }


  if (!isset($_GET[cmd])) {
    $directory_handle = opendir(GALLERY_ROOT.$gallery);
    $dirs = array();
    $files = array();
    while($var = readdir($directory_handle)) {
      if (is_dir(GALLERY_ROOT.$gallery.$var) and $var!="." and $var!="..") {
        $dirs[] = $var;
      } elseif (!is_dir(GALLERY_ROOT.$gallery.$var) and (image_type_ok($var)) ) {
        $files[] = $var;
      }
    }
    sort ($dirs);
    reset ($dirs);
    sort ($files);
    reset ($files);
    print_doc_start();

    $total_columns=($gallery_columns*2)+1;
    $img_width=THUMB_MAX_WIDTH+($thumb_border_width*2);
    $img_td_width=$img_width+(($thumb_td_border_width+$thumb_td_padding)*2);
    $table_width=(($img_td_width+$thumb_td_spacing)*$gallery_columns)+$thumb_td_spacing+($table_border_width*2);
    $write_width = (($img_td_width+$thumb_td_spacing)*$gallery_columns)+$thumb_td_spacing-10;

    $spacing_row="<tr><td class=\"empty\" colspan=".$total_columns." height=".$thumb_td_spacing."></td></tr>";
    $spacing_col="<td class=\"empty\" width=".$thumb_td_spacing."></td>";
    $empty_cell="<td class=\"empty\" width=".$img_td_width."></td>";

    echo "<table class=\"outer\" cellspacing=0 width=".$table_width.">";
    echo "<tr><th colspan=".$total_columns.">".htmlentities(GALLERY_NAME)."</th></tr>";
    echo "<tr><td width=".$write_width." colspan=".$total_columns.">";
    $links=explode("/", $gallery);
    echo "[<a href=\"".$_SERVER[PHP_SELF]."\">".htmlentities($home_text)."</a>]";
    if ($gallery!="" and is_array($links)) {
      for ($i=0; $i<=sizeof($links)-1; $i++) {
        if ($links[$i]!="") {
          echo " -> [<a href=\"".$_SERVER[PHP_SELF]."?gallery=";
          $gal_link="";
          for ($u=0; $u<=$i; $u++) {
            $gal_link.=$links[$u]."/";
          }
          echo $gal_link;
          $name = get_file(GALLERY_ROOT.$gal_link.$gallery_name_file , TRUE);
          if ($name) {
            $display_name = $name;
          } else {
            $break_pos = strpos($links[$i], $sort_divider);
            if ($break_pos != FALSE) {
              $break_pos = $break_pos+strlen($sort_divider);
            }
            $display_name = substr($links[$i], $break_pos);
            $display_name = ($dir_underscore_as_space ? str_replace("_", " ", $display_name) : $display_name);
          }
          echo"\">".$display_name."</a>]";
        }
      }
    }
    echo "</td></tr>";

    $desc = get_file(GALLERY_ROOT.$gallery.$gallery_description_file);
    if ($desc) {
      echo "<tr><td width=".$write_width." class=\"desc\" colspan=".$total_columns.">";
      echo $desc;
      echo "</td></tr>";
    }

    if (!$split_dir_img) {
      echo "<tr><th class=\"sub\" colspan=".$total_columns.">".htmlentities($gallery_header)."</th></tr>";
      echo $spacing_row;
    }

    if (sizeof($dirs)>0) {
      if ($split_dir_img) {
        echo "<tr><th class=\"sub\" colspan=".$total_columns.">".htmlentities($sub_gallery_header)."</th></tr>";
        echo $spacing_row;
      }
      echo "<tr>";
      $cols=0;
      for($x = 0; $x < sizeof($dirs); $x++) {
        $cols++;
        if($cols > $gallery_columns) {
          echo $spacing_col;
          echo "</tr>";
          echo $spacing_row;
          echo "<tr>";
          $cols=1;
        }
        $name = get_file(GALLERY_ROOT.$gallery.$dirs[$x]."/".$gallery_name_file, TRUE);
        if ($name) {
          $display_name = $name;
        } else {
          $break_pos = strpos($dirs[$x], $sort_divider);
          if ($break_pos != FALSE) {
            $break_pos = $break_pos+strlen($sort_divider);
          }
          $display_name = substr($dirs[$x], $break_pos);
          $display_name = ($dir_underscore_as_space ? str_replace("_", " ", $display_name) : $display_name);
        }
        echo $spacing_col;
        echo "<td width=".$img_width." class=\"dir\"><a href=\"".$_SERVER[PHP_SELF]."?gallery=".$gallery.$dirs[$x]."/\"><img alt=\"".($show_alt_description ? get_file(GALLERY_ROOT.$gallery.$dirs[$x]."/".$gallery_description_file,FLASE,FALSE) : "")."\" class=\"dir\" src=\"".$_SERVER[PHP_SELF]."?cmd=dirthumb&amp;gallery=".$gallery.$dirs[$x]."/\">".($show_dir_name ? "<br>[".$display_name."]" : "")."</a></td>";
      }
      if ($split_dir_img) {
        repeat_string($spacing_col.$empty_cell, ($gallery_columns-$cols));
        echo $spacing_col;
        echo "</tr>";
        echo $spacing_row;
      }
    }

    if (sizeof($files)>0) {
      if ($split_dir_img) {
        echo "<tr><th class=\"sub\" colspan=".$total_columns.">".htmlentities($gallery_header)."</th></tr>";
        echo $spacing_row;
        echo "<tr>";
        $cols=0;
      }
      for($x = 0; $x < sizeof($files); $x++) {
        $cols++;
        if($cols > $gallery_columns) {
          echo $spacing_col;
          echo "</tr>";
          echo $spacing_row;
          echo "<tr>";
          $cols=1;
        }
        $break_pos = strpos($files[$x], $sort_divider);
        if ($break_pos != FALSE) {
          $break_pos = $break_pos+strlen($sort_divider);
        }
        $display_name = substr($files[$x], $break_pos);
        echo $spacing_col;
        echo "<td width=".$img_width." class=\"img\">";
        if ($use_java and $image_in_new_window) {
          echo "<a href=\"java script:void(null)\" onClick=\"java script:window.open('".$_SERVER[PHP_SELF]."?cmd=imageform&amp;gallery=".$gallery."&amp;image=".$files[$x]."', '', 'toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=yes');\">";
        } else {
          echo "<a".($image_in_new_window ? " target=\"_blank\"" : "")." href=\"".$_SERVER[PHP_SELF]."?cmd=imageform&amp;gallery=".$gallery."&amp;image=".$files[$x]."\">";
        }
        echo "<img alt=\"".($show_alt_description ? get_file(substr(GALLERY_ROOT.$gallery.$files[$x], 0, strrpos(GALLERY_ROOT.$gallery.$files[$x], ".")).".txt",FALSE,FALSE) : "")."\" class=\"thumb\" src=\"".$_SERVER[PHP_SELF]."?cmd=thumb&amp;gallery=".$gallery."&amp;image=".$files[$x]."\">".($show_image_name ? "<br><small>".$display_name."</small>" : "")."</a></td>";
      }
      repeat_string($spacing_col.$empty_cell, ($gallery_columns-$cols));
      echo $spacing_col;
      echo "</tr>";
      echo $spacing_row;
    }

    if (!(sizeof($files)>0) and !$split_dir_img) {
      repeat_string($spacing_col.$empty_cell, ($gallery_columns-$cols));
      echo $spacing_col;
      echo "</tr>";
      echo $spacing_row;
    }

    echo "</table>";
    echo "<a target=\"_self\" href=\"http://[domainnavn.dk]/\">Retur til forsiden</a>";
    print_doc_end();
    exit;
  }
?>
Avatar billede mbm2016 Nybegynder
10. november 2009 - 13:17 #1
Det er okay at stille spørgsmål, og det kan godt være der er 'nogle' der får lyst til at hjælpe dig. Men at poste hele ens kode direkte ind fovirrer mere end at gavne.

Der er ikke mange der tager sig mere end 15 sek. på at læse et spørgsmål igennem og hvis det tager længere tid, dropper mange at hjælpe

Jeg vil råde dig til kun at poste der hvor du har dit problem i koden, og evt. poste flere kodestykker ind efterhånden som du får hjælp, på den måde er der flere der får lyst og kan hjælpe dig, og du får måske løsningen på dit problem.

Ja nu sidder jeg her og kæfter op om sådanne ting uden at have sat mig ind i dit spørgsmål, men det synes jeg bare beviser hvor besværligt det er at hjælpe, når hele koden bliver postet.

Mvh
Magnus
Avatar billede mibu Nybegynder
10. november 2009 - 13:31 #2
Problemmet er netop, hvor i koden skal der rettes hvis l...! øh! skidtet skal virke. Men ellers har du fuldstændig ret, normalt gider jeg heller ikke selv glo så meget kode igennem, jeg tænkte bare, at de rigtige php hajer, lynhurtigt kunne spotte problemet, for som sagt så virker scriptet fint, men jeg ville bare gerne have det indkluderet i mit design og det kan jeg ikke.
Og hvis jeg postede spørgsmålet uden kode, så ville den første reaktion jo nok være "lad os se koden!" :-)
Avatar billede mibu Nybegynder
10. november 2009 - 13:39 #3
Som Magnus så foreslår :-)

så tror jeg at problemet starter i toppen af scriptet:

function print_doc_start($head="", $body="") {
    echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"><html><head><link rel=\"stylesheet\" type=\"text/css\" href=\"".$_SERVER[PHP_SELF]."?cmd=css\"><meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"><title>".htmlentities(GALLERY_NAME)."</title>".$head."</head><body".$body.">";
  }


  function print_doc_end() {
    echo "</body></html>";
  }

Jeg kan godt udkommenterer disse linier (og et par steder længere nede) unden at det får anden virkning end at stylesheet relaterede design falder tilbage til default. Men hvis jeg så prøver at "include" scriptet, kommer der ingen billder.
Avatar billede intenz Novice
11. november 2009 - 00:13 #4
Kommer der billede hvis du bare kaldes scriptet direkte?

print_doc_end() gør ingenting udover at skrive de sidste ting i html koden.

Stylesheetet kan du bare kopiere over i dit eget stylesheet og så kalde det derfra, så behøver du ikke print_doc_start().
Du kan se, at det ligger lige efter:
if ($_GET[cmd]=="css") {
    header("Content-type: text/css");
Avatar billede mibu Nybegynder
12. november 2009 - 16:16 #5
Jeg får det ikke rigtig til at spille, men "intenz" svar har da inspireret mig til at prøve nye veje, så det er da endt med, at jeg alligevel har formået at putte lidt af min templete på, så det ser helt hæderligt ud.

Tak for input.

Og hvis både intenz og mbm2007 vil lægge et svar, vil jeg gerne dele dem i mellem jer.

Intenz:
Fordi det gav mig inspiration til at søge andre veje.

mbm2007:
For den berettigede kritik, og for det fornuftige forslag, at klippe kodestumper ud i stedet for at tæppebombe, med 800 linier kode.
Avatar billede intenz Novice
12. november 2009 - 16:30 #6
Godt du kunne bruge det til noget :)
Avatar billede mbm2016 Nybegynder
15. november 2009 - 16:52 #7
Hehh ;) Værsgo :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester