...auf dem Weg nach bootstrap city

Discuss phpwcms here, please do not post support requests, bug reports, or feature requests! Non-phpwcms questions, discussion goes in General Chat!
photojo
Posts: 660
Joined: Wed 15. Nov 2006, 20:02
Contact:

Re: ...auf dem Weg nach bootstrap city

Post by photojo » Mon 3. Aug 2015, 18:57

Super, alles klar, kapiert. So mach ich es. Es bleibt also auf "Standard".

Nur ums bis zum Ende zu durchdringen: Das Listenfeld mit Auswahl "Standard" und "custom-settings.php" ist also quasi überflüssig, wenn man eh nur die conf.template_default.inc.php hardcoden soll?

Old Boy
Posts: 1036
Joined: Fri 23. Nov 2012, 13:52

Re: ...auf dem Weg nach bootstrap city

Post by Old Boy » Mon 3. Aug 2015, 19:47

Das brauchst du NUR dann, wenn du einzelne Kategorie deines Site variieren möchtest, der überwiegende "Rest" ist dann eben STANDARD!

photojo
Posts: 660
Joined: Wed 15. Nov 2006, 20:02
Contact:

Re: ...auf dem Weg nach bootstrap city

Post by photojo » Tue 4. Aug 2015, 12:20

So, dank der sehr ausführlichen Anleitung von Old Boy habe ich es geschaft, die CP mit einem div zu umschließen. Danke nochmals!

photojo
Posts: 660
Joined: Wed 15. Nov 2006, 20:02
Contact:

Re: ...auf dem Weg nach bootstrap city

Post by photojo » Tue 4. Aug 2015, 12:27

... aber leider klappt es nicht bei einem Onpager, zumindest nicht bei meiner Vorlage!?

Old Boy
Posts: 1036
Joined: Fri 23. Nov 2012, 13:52

Re: ...auf dem Weg nach bootstrap city

Post by Old Boy » Tue 4. Aug 2015, 12:47

Na Gott sei Dank, ich hatte schon die grössten Befürchtungen :D

Wäre nun die Frage zu klären ... was willst du denn eigentlich erreichen?

Man muss ja nix kompliziertes nur deshalb machen, weil es geht !!!

Gibt's denn was ONLINE zu sehen???

Old Boy
Posts: 1036
Joined: Fri 23. Nov 2012, 13:52

Re: ...auf dem Weg nach bootstrap city

Post by Old Boy » Thu 6. Aug 2015, 00:09

Ja, ich hab's jetzt selber gesehen... die Sache mit dem Nachladen von ContentParts per SHOW_CONTENT und der cpgroup_custom Lösung stehen sich im Weg :roll:
Wahrscheinlich ist die Reihenfolge der internen Abarbeitung die Ursache... aber das ist reine Spekulation!

OK, ich habe dann noch mal meine alten Notizen ausgegraben und das Ganze mit Bordmitteln für DUMMYS aufgesetzt...
klappt ganz passabel, selbst die "Navigation" funktioniert :)

http://forum.phpwcms.org/viewtopic.php?f=2&t=24749

User avatar
update
Moderator
Posts: 6380
Joined: Mon 10. Jan 2005, 17:29
Location: germany / outdoor

Re: ...auf dem Weg nach bootstrap city

Post by update » Sat 26. Sep 2015, 10:15

Old Boy wrote:Hier werden wir versuchen eine clearfix vor dem 3. Contentpart dann - und nur dann - einzubinden, wenn die responsive Darstellung lediglich 2 CPs nebeneinander anzeigen soll.
Zeig mal ;)
It's mostly all about webdesign, logo design, new and old pages refresh, print BUT slowly switching to be supporter for the band Mykket Morton. Visit Mykket Morton on FB. Listen Mykket Morton and live videos on youtube.

User avatar
update
Moderator
Posts: 6380
Joined: Mon 10. Jan 2005, 17:29
Location: germany / outdoor

Re: ...auf dem Weg nach bootstrap city + print

Post by update » Wed 14. Oct 2015, 10:22

Kann es sein, dass bootstrap alles printet, auch die Linkziele usw und nicht auf NO_PRINT reagiert?
Bisher dachte ich immer, dass phpwcms das steuert...
EDIT: für die Links (dann ohne xy.html) gibt es diese Möglichkeit:

Code: Select all

@media print {
  a[href]:after {
    content: none;
  }
}
It's mostly all about webdesign, logo design, new and old pages refresh, print BUT slowly switching to be supporter for the band Mykket Morton. Visit Mykket Morton on FB. Listen Mykket Morton and live videos on youtube.

User avatar
Jensensen
Posts: 2986
Joined: Tue 17. Oct 2006, 21:11
Location: auf der mlauer

Re: ...auf dem Weg nach bootstrap city

Post by Jensensen » Tue 20. Oct 2015, 00:40

Hallo erstmal,

vorab erst einmal vielen Dank allen vorherigen Schreibern für ihre ausführlichen Anleitungen und Hinweise.

Dazu zählt beispielsweise auch der Hinweis, wie die Spalten, Zeilen oder Abschnittsbereiche eines Layouts, hier am Beispiel von Bootstrap, mit Hilfe eines globalen Templates definiert werden können.
Bislang hatte ich {hoserunter} das Spaltenlayout global definiert unter:
--> admin --> vorlagen bzw. unter:
--> admin --> templates
sowie durch eine Anpassung der Templates für die jeweiligen Content Parts.

Darüber hinaus, lieber Old Boy, habe ich nun endlich auch das Prinzip der Gruppierung von Content Parts verstanden.

update wrote:Das bedeutet im Klartext:
Ich schreibe obige Anweisungen in die conf.template.default.inc.php- Datei und nur da rein. So gut wie alle anderen Anweisungen in einer custom.settings.php sind jedoch auf Strukturebenen beziehbar (bis auf zB body id und class) :?:
Es gilt weiterhin das Prinzip, dass die eigenen Einstellungen die globalen Standardwerte überschreiben.
Oder anders ausgedrückt, die Standardwerte werden von den eigenen, individuellen Settings überschrieben.

@update: sofern für die Strukturebene die jeweiligen eigenen Settings ausgewählt wurden.

Es gilt aber auch weiterhin, dass das, was gegebenenfalls später überschrieben werden soll, zuvor global definiert ist:
Oliver Georgi wrote:Du kannst auch den Wrapper dann für bestimmte Eben variieren, z.B. andere Klasse oder ganz leer. Aber die Definition des Wrappers MUSS global erfolgen.
Ich ändere daher immer beide Dateien bzw. überprüfe, ob in beiden Dateien alle erforderlichen Variablen beschrieben sind.


BEISPIEL:
In diesem Beispiel ergänze ich global ein --> jumbotron in der Datei:
/include/config/conf.template_default.inc.php

Code: Select all

$template_default['attributes'] = array(
	'navlist-bs-dropdown-data'	=> 'data-toggle="dropdown"',
	'navlist-bs-dropdown-caret'	=> ' <b class="caret"></b>',
	'cpgroup'					=> 'data', // data = <span>, href = <a>
	'cpgroup_custom'			=> array(
		'bs-container-row' => array( // No underscore allowed here for group index!!!
			'title'		=> 'Bootstrap Container/Row',
			'prefix'	=> '<div class="container"><div class="row">',
			'suffix'	=> '</div></div>'
		),
		'bs-neue-zeile' => array( // No underscore allowed here for group index!!!
			'title'		=> 'Bootstrap Row',
			'prefix'	=> '<div class="row">',
			'suffix'	=> '</div>'
		),
		'bs-jumbo' => array( // No underscore allowed here for group index!!!
			'title'		=> 'Jumbotron',
			'prefix'	=> ' <div class="jumbotron"><div class="container">',
			'suffix'	=> '</div></div>'
		) /* ,
		'sample' => array( // No underscore allowed here for group index!!!
			'title'		=> 'Wrapper',
			'prefix'	=> '%1$s<div class="wrapper">', // optional: %1$s = title, %2$s = tab id
			'suffix'	=> '</div>' // optional: %1$s, %2$s
		) */
	),
	'cp-paginate' => array(
		'link-prefix' => ' ',
		'link-suffix' => ' ',
		'value-prefix' => '',
		'value-suffix' => ''
	)
);
In der oder den Dateien mit den eigenen Einstellungen unter:
/template/inc_settings/template_default/custom_settings.php oder bspw.
/template/inc_settings/template_default/eigene_einstellung_01.php

füge ich den gleichen Inhalt ein und ergänze in diesem Beispiel für das --> Bootstrap --> Jumbotron eine weitere CSS-Klasse --> MYNICEBLUEGRADIENT:

Code: Select all

$template_default['attributes'] = array(
	'navlist-bs-dropdown-data'	=> 'data-toggle="dropdown"',
	'navlist-bs-dropdown-caret'	=> ' <b class="caret"></b>',
	'cpgroup'					=> 'data', // data = <span>, href = <a>
	'cpgroup_custom'			=> array(
		'bs-container-row' => array( // No underscore allowed here for group index!!!
			'title'		=> 'Bootstrap Container/Row',
			'prefix'	=> '<div class="container"><div class="row">',
			'suffix'	=> '</div></div>'
		),
		'bs-neue-zeile' => array( // No underscore allowed here for group index!!!
			'title'		=> 'Bootstrap Row',
			'prefix'	=> '<div class="row">',
			'suffix'	=> '</div>'
		),
		'bs-jumbo' => array( // No underscore allowed here for group index!!!
			'title'		=> 'Jumbotron',
			'prefix'	=> ' <div class="jumbotron MYNICEBLUEGRADIENT"><div class="container">',
			'suffix'	=> '/div></div>'
		) /* ,
		'sample' => array( // No underscore allowed here for group index!!!
			'title'		=> 'Wrapper',
			'prefix'	=> '%1$s<div class="wrapper">', // optional: %1$s = title, %2$s = tab id
			'suffix'	=> '</div>' // optional: %1$s, %2$s
		) */
	),
	'cp-paginate' => array(
		'link-prefix' => ' ',
		'link-suffix' => ' ',
		'value-prefix' => '',
		'value-suffix' => ''
	)
);
Das funktioniert alles wunderbar, verlässlich, sauber. Problematisch finde ich jedoch, dass mit den Änderungen in
/include/config/conf.template_default.inc.php
eine Datei aus dem --> git --> Branch origin:master --> repository betroffen ist.
Wenn OG Aktualisierungen vornimmt, werden meine Änderungen womöglich überschrieben!?

Das versuche ich zu umgehen, indem ich einerseits die Änderungen separat speichere und andererseits lokal mit eigenen Branches arbeite.
Beispielsweise habe ich bei einem neuen Projekt zunächst --> git --> Branch origin:master heruntergeladen.
Danach erstelle ich sofort einen neuen --> Branch "myDevDingsBums", ändere, ergänze, committe.

Und dann merge ich myDEV into MASTER.
Wenn OG dann aktualisiert und ich --> master abrufe und merge, müsste doch alles TUTTI sein, oder?
Ist das der absolut perfekte workflow?
{so_much} | Knick-Knack. | GitHub
Umlaute im URL sind meistens immer Kacke.

User avatar
Jensensen
Posts: 2986
Joined: Tue 17. Oct 2006, 21:11
Location: auf der mlauer

Re: ...auf dem Weg nach bootstrap city

Post by Jensensen » Tue 20. Oct 2015, 03:10

Da wir auf dem Weg nach bootstrap city sind, folgt hier mein --> Gruntfile.js
für die aktuelle Bootstrap Version 3.3.5, die noch mit --> less operiert, aber bald danach auf --> SASS umstellt.

Code: Select all

/*!
 * Bootstrap's Gruntfile
 * http://getbootstrap.com
 * Copyright 2013-2015 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */

module.exports = function (grunt) {
  'use strict';

  // Force use of Unix newlines
  grunt.util.linefeed = '\n';

  RegExp.quote = function (string) {
    return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&');
  };

  var fs = require('fs');
  var path = require('path');
  var npmShrinkwrap = require('npm-shrinkwrap');
  var generateGlyphiconsData = require('./grunt/bs-glyphicons-data-generator.js');
  var BsLessdocParser = require('./grunt/bs-lessdoc-parser.js');
  var getLessVarsData = function () {
    var filePath = path.join(__dirname, 'less/variables.less');
    var fileContent = fs.readFileSync(filePath, { encoding: 'utf8' });
    var parser = new BsLessdocParser(fileContent);
    return { sections: parser.parseFile() };
  };
  var generateRawFiles = require('./grunt/bs-raw-files-generator.js');
  var generateCommonJSModule = require('./grunt/bs-commonjs-generator.js');
  var configBridge = grunt.file.readJSON('./grunt/configBridge.json', { encoding: 'utf8' });

  Object.keys(configBridge.paths).forEach(function (key) {
    configBridge.paths[key].forEach(function (val, i, arr) {
      arr[i] = path.join('./docs/assets', val);
    });
  });

  // Project configuration.
  grunt.initConfig({

    // Metadata.
    pkg: grunt.file.readJSON('package.json'),
    banner: '/*!\n' +
            ' * Bootstrap v<%= pkg.version %> (<%= pkg.homepage %>)\n' +
            ' * Copyright 2011-<%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' +
            ' * Licensed under the <%= pkg.license %> license\n' +
            ' */\n',
    jqueryCheck: configBridge.config.jqueryCheck.join('\n'),
    jqueryVersionCheck: configBridge.config.jqueryVersionCheck.join('\n'),

    // Task configuration.
    clean: {
      dist: 'dist',
      docs: 'docs/dist'
    },

    jshint: {
      options: {
        jshintrc: 'js/.jshintrc'
      },
      grunt: {
        options: {
          jshintrc: 'grunt/.jshintrc'
        },
        src: ['Gruntfile.js', 'package.js', 'grunt/*.js']
      },
      core: {
        src: 'js/*.js'
      },SASSSASS
      test: {
        options: {
          jshintrc: 'js/tests/unit/.jshintrc'
        },
        src: 'js/tests/unit/*.js'
      },
      assets: {
        src: ['docs/assets/js/src/*.js', 'docs/assets/js/*.js', '!docs/assets/js/*.min.js']
      }
    },

    jscs: {
      options: {
        config: 'js/.jscsrc'
      },
      grunt: {
        src: '<%= jshint.grunt.src %>'
      },
      core: {
        src: '<%= jshint.core.src %>'
      },
      test: {
        src: '<%= jshint.test.src %>'
      },
      assets: {
        options: {
          requireCamelCaseOrUpperCaseIdentifiers: null
        },
        src: '<%= jshint.assets.src %>'
      }
    },

    concat: {
      options: {
        banner: '<%= banner %>\n<%= jqueryCheck %>\n<%= jqueryVersionCheck %>',
        stripBanners: false
      },
      bootstrap: {
        src: [
          'js/transition.js',
          'js/alert.js',
          'js/button.js',
          'js/carousel.js',
          'js/collapse.js',
          'js/dropdown.js',
          'js/modal.js',
          'js/tooltip.js',
          'js/popover.js',
          'js/scrollspy.js',
          'js/tab.js',
          'js/affix.js'
        ],
        dest: 'dist/js/<%= pkg.name %>.js'
      }
    },

    uglify: {
      options: {
        compress: {
          warnings: false
        },
        mangle: true,
        preserveComments: 'some'
      },
      core: {
        src: '<%= concat.bootstrap.dest %>',
        dest: 'dist/js/<%= pkg.name %>.min.js'
      },
      customize: {
        src: configBridge.paths.customizerJs,
        dest: 'docs/assets/js/customize.min.js'
      },
      docsJs: {
        src: configBridge.paths.docsJs,
        dest: 'docs/assets/js/docs.min.js'
      }
    },

    qunit: {
      options: {
        inject: 'js/tests/unit/phantom.js'
      },
      files: 'js/tests/index.html'
    },

    less: {
      compileCore: {
        options: {
          strictMath: true,
          sourceMap: true,
          outputSourceFiles: true,
          sourceMapURL: '<%= pkg.name %>.css.map',
          sourceMapFilename: 'dist/css/<%= pkg.name %>.css.map'
        },
        src: 'less/bootstrap.less',
        dest: 'dist/css/<%= pkg.name %>.css'
      },
      compileTheme: {
        options: {
          strictMath: true,
          sourceMap: true,
          outputSourceFiles: true,
          sourceMapURL: '<%= pkg.name %>-theme.css.map',
          sourceMapFilename: 'dist/css/<%= pkg.name %>-theme.css.map'
        },
        src: 'less/theme.less',
        dest: 'dist/css/<%= pkg.name %>-theme.css'
      },
      compileTHIS_IS_MY_PROJECT: {
        options: {
          strictMath: true,
          sourceMap: true,
          outputSourceFiles: true,
          sourceMapURL: 'MY_PROJECT_v1.css.map',
          sourceMapFilename: 'dist/css/MY_PROJECT_v1.css.map'
        },
        src: 'less/1_MY_PROJECT_v1.less',
        dest: 'dist/css/MY_PROJECT_v1.css'
      }
    },

    autoprefixer: {
      options: {
        browsers: configBridge.config.autoprefixerBrowsers
      },
      core: {
        options: {
          map: true
        },
        src: 'dist/css/<%= pkg.name %>.css'
      },
      theme: {
        options: {
          map: true
        },
        src: 'dist/css/<%= pkg.name %>-theme.css'
      },
      MY_PROJECT: {
        options: {
          map: true
        },
        src: 'dist/css/MY_PROJECT_v1.css'
      },
      docs: {
        src: ['docs/assets/css/src/docs.css']
      },
      examples: {
        expand: true,
        cwd: 'docs/examples/',
        src: ['**/*.css'],
        dest: 'docs/examples/'
      }
    },
    MY_PROJECT_v1
    csslint: {
      options: {
        csslintrc: 'less/.csslintrc'
      },
      dist: [
        'dist/css/bootstrap.css',
        'dist/css/bootstrap-theme.css',
        'dist/css/MY_PROJECT_v1.css'
      ],
      examples: [
        'docs/examples/**/*.css'
      ],
      docs: {
        options: {
          ids: false,
          'overqualified-elements': false
        },
        src: 'docs/assets/css/src/docs.css'
      }
    },

    cssmin: {
      options: {
        // TODO: disable `zeroUnits` optimization once clean-css 3.2 is released
        //    and then simplify the fix for https://github.com/twbs/bootstrap/issues/14837 accordingly
        compatibility: 'ie8',
        keepSpecialComments: '*',
        advanced: false
      },
      minifyCore: {
        src: 'dist/css/<%= pkg.name %>.css',
        dest: 'dist/css/<%= pkg.name %>.min.css'
      },
      minifyTheme: {
        src: 'dist/css/<%= pkg.name %>-theme.css',
        dest: 'dist/css/<%= pkg.name %>-theme.min.css'
      },
	  minifyTHIS_IS_MY_PROJECT: {
        src: 'dist/css/MY_PROJECT_v1.css',
        dest: 'dist/css/MY_PROJECT_v1.min.css'
      },
      docs: {
        src: [
          'docs/assets/css/src/pygments-manni.css',
          'docs/assets/css/src/docs.css'
        ],
        dest: 'docs/assets/css/docs.min.css'
      }
    },

    csscomb: {
      options: {
        config: 'less/.csscomb.json'
      },
      dist: {
        expand: true,
        cwd: 'dist/css/',
        src: ['*.css', '!*.min.css'],
        dest: 'dist/css/'
      },
      examples: {
        expand: true,
        cwd: 'docs/examples/',
        src: '**/*.css',
        dest: 'docs/examples/'
      },
      docs: {
        src: 'docs/assets/css/src/docs.css',
        dest: 'docs/assets/css/src/docs.css'
      }
    },

    copy: {
      fonts: {
        expand: true,
        src: 'fonts/*',
        dest: 'dist/'
      },
      docs: {
        expand: true,
        cwd: 'dist/',
        src: [
          '**/*'
        ],
        dest: 'docs/dist/'
      },
      THIS_IS_myDist: {
        expand: true,MY_PROJECT_v1
        cwd: 'dist/',
        src: [
          '**/*'
        ],
        dest: '../template/inc_css/bs335'
      }
    },

    connect: {
      server: {
        options: {
          port: 3000,
          base: '.'
        }
      }
    },

    jekyll: {
      options: {
        config: '_config.yml'
      },
      docs: {},
      github: {
        options: {
          raw: 'github: true'
        }
      }
    },

    htmlmin: {
      dist: {
        options: {
          collapseWhitespace: true,
          conservativeCollapse: true,
          minifyCSS: true,
          minifyJS: true,
          removeAttributeQuotes: true,
          removeComments: true
        },
        expand: true,
        cwd: '_gh_pages',
        dest: '_gh_pages',
        src: [
          '**/*.html',
          '!examples/**/*.html'
        ]
      }
    },

    jade: {
      options: {
        pretty: true,
        data: getLessVarsData
      },
      customizerVars: {
        src: 'docs/_jade/customizer-variables.jade',
        dest: 'docs/_includes/customizer-variables.html'
      },
      customizerNav: {
        src: 'docs/_jade/customizer-nav.jade',
        dest: 'docs/_includes/nav/customize.html'
      }
    },

    htmllint: {
      options: {
        ignore: [
          'Attribute "autocomplete" not allowed on element "button" at this point.',
          'Attribute "autocomplete" not allowed on element "input" at this point.',
          'Element "img" is missing required attribute "src".'
        ]
      },
      src: '_gh_pages/**/*.html'
    },

    watch: {
      options: { livereload: true }, // reloads browser on save
      src: {
        files: '<%= jshint.core.src %>',
        tasks: ['jshint:core', 'qunit', 'concat']
      },
      test: {
        files: '<%= jshint.test.src %>',
        tasks: ['jshint:test', 'qunit']
      },
      less: {
        files: 'less/**/*.less',
        tasks: ['less', 'copy:THIS_IS_myDist']
      }
    },

    sed: {
      versionNumber: {
        pattern: (function () {
          var old = grunt.option('oldver');
          return old ? RegExp.quote(old) : old;
        })(),
        replacement: grunt.option('newver'),
        exclude: [
          'dist/fonts',
          'docs/assets',
          'fonts',
          'js/tests/vendor',
          'node_modules',
          'test-infra'
        ],
        recursive: true
      }
    },

    'saucelabs-qunit': {
      all: {
        options: {
          build: process.env.TRAVIS_JOB_ID,
          throttled: 10,
          maxRetries: 3,
          maxPollRetries: 4,
          urls: ['http://127.0.0.1:3000/js/tests/index.html?hidepassed'],
          browsers: grunt.file.readYAML('grunt/sauce_browsers.yml')
        }
      }
    },

    exec: {
      npmUpdate: {
        command: 'npm update'
      }
    },

    compress: {
      main: {
        options: {
          archive: 'bootstrap-<%= pkg.version %>-dist.zip',
          mode: 'zip',
          level: 9,
          pretty: true
        },
        files: [
          {
            expand: true,
            cwd: 'dist/',
            src: ['**'],
            dest: 'bootstrap-<%= pkg.version %>-dist'
          }
        ]
      }
    }

  });


  // These plugins provide necessary tasks.
  require('load-grunt-tasks')(grunt, { scope: 'devDependencies' });
  require('time-grunt')(grunt);

  // Docs HTML validation task
  grunt.registerTask('validate-html', ['jekyll:docs', 'htmllint']);

  var runSubset = function (subset) {
    return !process.env.TWBS_TEST || process.env.TWBS_TEST === subset;
  };
  var isUndefOrNonZero = function (val) {
    return val === undefined || val !== '0';
  };

  // Test task.
  var testSubtasks = [];
  // Skip core tests if running a different subset of the test suite
  if (runSubset('core') &&
      // Skip core tests if this is a Savage build
      process.env.TRAVIS_REPO_SLUG !== 'twbs-savage/bootstrap') {
    testSubtasks = testSubtasks.concat(['dist-css', 'dist-js', 'csslint:dist', 'test-js', 'docs']);
  }
  // Skip HTML validation if running a different subset of the test suite
  if (runSubset('validate-html') &&
      // Skip HTML5 validator on Travis when [skip validator] is in the commit message
      isUndefOrNonZero(process.env.TWBS_DO_VALIDATOR)) {
    testSubtasks.push('validate-html');SASS
  }
  // Only run Sauce Labs tests if there's a Sauce access key
  if (typeof process.env.SAUCE_ACCESS_KEY !== 'undefined' &&
      // Skip Sauce if running a different subset of the test suite
      runSubset('sauce-js-unit') &&
      // Skip Sauce on Travis when [skip sauce] is in the commit message
      isUndefOrNonZero(process.env.TWBS_DO_SAUCE)) {
    testSubtasks.push('connect');
    testSubtasks.push('saucelabs-qunit');
  }
  grunt.registerTask('test', testSubtasks);
  grunt.registerTask('test-js', ['jshint:core', 'jshint:test', 'jshint:grunt', 'jscs:core', 'jscs:test', 'jscs:grunt', 'qunit']);

  // JS distribution task.
  grunt.registerTask('dist-js', ['concat', 'uglify:core', 'commonjs']);

  // CSS distribution task.
  grunt.registerTask('less-compile', ['less:compileCore', 'less:compileTheme', 'less:compileTHIS_IS_MY_PROJECT']);
  grunt.registerTask('dist-css', ['less-compile', 'autoprefixer:core', 'autoprefixer:theme', 'autoprefixer:MY_PROJECT', 'csscomb:dist', 'cssmin:minifyCore', 'cssmin:minifyTheme', 'cssmin:minifyTHIS_IS_MY_PROJECT', 'copy:THIS_IS_myDist']);

  // Full distribution task.
  grunt.registerTask('dist', ['clean:dist', 'dist-css', 'copy:fonts', 'dist-js']);

  // Default task.
  grunt.registerTask('default', ['clean:dist', 'copy:fonts', 'test']);

  // Version numbering task.
  // grunt change-version-number --oldver=A.B.C --newver=X.Y.Z
  // This can be overzealous, so its changes should always be manually reviewed!
  grunt.registerTask('change-version-number', 'sed');

  grunt.registerTask('build-glyphicons-data', function () { generateGlyphiconsData.call(this, grunt); });

  // task for building customizer
  grunt.registerTask('build-customizer', ['build-customizer-html', 'build-raw-files']);
  grunt.registerTask('build-customizer-html', 'jade');
  grunt.registerTask('build-raw-files', 'Add scripts/less files to customizer.', function () {
    var banner = grunt.template.process('<%= banner %>');
    generateRawFiles(grunt, banner);
  });

  grunt.registerTask('commonjs', 'Generate CommonJS entrypoint module in dist dir.', function () {
    var srcFiles = grunt.config.get('concat.bootstrap.src');
    var destFilepath = 'dist/js/npm.js';
    generateCommonJSModule(grunt, srcFiles, destFilepath);
  });

  // Docs task.
  grunt.registerTask('docs-css', ['autoprefixer:docs', 'autoprefixer:examples', 'csscomb:docs', 'csscomb:examples', 'cssmin:docs']);
  grunt.registerTask('lint-docs-css', ['csslint:docs', 'csslint:examples']);
  grunt.registerTask('docs-js', ['uglify:docsJs', 'uglify:customize']);
  grunt.registerTask('lint-docs-js', ['jshint:assets', 'jscs:assets']);
  grunt.registerTask('docs', ['docs-css', 'lint-docs-css', 'docs-js', 'lint-docs-js', 'clean:docs', 'copy:docs', 'build-glyphicons-data', 'build-customizer']);

  grunt.registerTask('prep-release', ['dist', 'docs', 'jekyll:github', 'htmlmin', 'compress']);

  // Task for updating the cached npm packages used by the Travis build (which are controlled by test-infra/npm-shrinkwrap.json).
  // This task should be run and the updated file should be committed whenever Bootstrap's dependencies change.
  grunt.registerTask('update-shrinkwrap', ['exec:npmUpdate', '_update-shrinkwrap']);
  grunt.registerTask('_update-shrinkwrap', function () {
    var done = this.async();
    npmShrinkwrap({ dev: true, dirname: __dirname }, function (err) {
      if (err) {
        grunt.fail.warn(err);
      }
      var dest = 'test-infra/npm-shrinkwrap.json';
      fs.renameSync('npm-shrinkwrap.json', dest);
      grunt.log.writeln('File ' + dest.cyan + ' updated.');
      done();
    });
  });
};

grunt erstellt:

/bootstrap-3.3.5/dist/css
/bootstrap-3.3.5/dist/fonts
/bootstrap-3.3.5/dist/js

Default, nach der Installation werden nur
--> /css/bootstrap.css
--> /css/bootstrap-theme.css
--> /fonts
--> /js
usw. erstellt.

In diesem Beispiel [siehe Gruntfile] wird zusätzlich auch
/MY_PROJECT_v1.css
/MY_PROJECT_v1.min.css
usw. erstellt und in das --> Live Project --> kopiert


Zunächst werden in diesem Fall folgenden Dateien erstellt:
/bootstrap-3.3.5/dist/css/bootstrap.css
/bootstrap-3.3.5/dist/css/bootstrap.css.map
/bootstrap-3.3.5/dist/css/bootstrap.min.css
/bootstrap-3.3.5/dist/css/bootstrap-theme.css
/bootstrap-3.3.5/dist/css/bootstrap-theme.css.map
/bootstrap-3.3.5/dist/css/bootstrap-theme.min.css
/bootstrap-3.3.5/dist/css/MY_PROJECT_v1.css
/bootstrap-3.3.5/dist/css/MY_PROJECT_v1.css.map
/bootstrap-3.3.5/dist/css/MY_PROJECT_v1.min.css

Der Befehl [SIEHE OBEN Gruntfile!]
copy: --> THIS_IS_myDist: kopiert alle Dateien in das Verzeichnis
../template/inc_css/bs335

Das Kopieren ist der KNÜLLER! Denn danach liegen die Kopien innerhalb des eigenen Projektes --> Live Project unter:
/template/inc_css/bs335/css
/template/inc_css/bs335/fonts
/template/inc_css/bs335/js


Aufruf von grunt im Terminal, console, shell z.B.:
grunt dist
grunt watch


zack, schwupps, done, fertig.
{so_much} | Knick-Knack. | GitHub
Umlaute im URL sind meistens immer Kacke.

User avatar
update
Moderator
Posts: 6380
Joined: Mon 10. Jan 2005, 17:29
Location: germany / outdoor

Re: ...auf dem Weg nach bootstrap city - CP slider

Post by update » Tue 10. Nov 2015, 21:16

Ich schlage mich gerade mit dem Thema rum, Content Parts zu "sliden".
Bin aber irgendwie festgefahren...
Jemand eine Idee? Wäre cool.
It's mostly all about webdesign, logo design, new and old pages refresh, print BUT slowly switching to be supporter for the band Mykket Morton. Visit Mykket Morton on FB. Listen Mykket Morton and live videos on youtube.

User avatar
Uwe367
Posts: 925
Joined: Sat 15. Sep 2007, 07:19
Location: Koblenz

Re: ...auf dem Weg nach bootstrap city - CP slider

Post by Uwe367 » Wed 11. Nov 2015, 05:56

update wrote:Ich schlage mich gerade mit dem Thema rum, Content Parts zu "sliden".
Wie willst du die sliden?
Willst du CP´s gruppieren oder willst du sie mittels { SHOW_CONTENT:id } beispielsweise im CP Register/Tabs mit einem enstprechenden Template einbauen?
Für zweiteres hätte ich eine Lösung parat. Heißt Liqiud Slider und ist hier zu finden: http://liquidslider.com/
Template dafür hab ich mir zusammengebaut und läuft auch einwandfrei.

User avatar
juergen
Moderator
Posts: 4550
Joined: Mon 10. Jan 2005, 18:10
Location: Weinheim
Contact:

Re: ...auf dem Weg nach bootstrap city

Post by juergen » Wed 11. Nov 2015, 07:27

Mensch claus, das hat JEDER ;)

Willst du etwas raffiniertes machen ? Beliebig viele Beiträge, nach Datum und alphabetisch sortiert ? Oder im Kreis slidern ? :D

User avatar
update
Moderator
Posts: 6380
Joined: Mon 10. Jan 2005, 17:29
Location: germany / outdoor

Re: ...auf dem Weg nach bootstrap city

Post by update » Wed 11. Nov 2015, 08:28

Uwe367 wrote:Willst du CP´s gruppieren
So wär's mir am liebsten, ja.
juergen wrote:Willst du etwas raffiniertes machen ?
Ja.
juergen wrote:Beliebig viele Beiträge, nach Datum und alphabetisch sortiert ? Oder im Kreis slidern ?
Auch das.

Ist für die Bandseite meines Jüngsten...
It's mostly all about webdesign, logo design, new and old pages refresh, print BUT slowly switching to be supporter for the band Mykket Morton. Visit Mykket Morton on FB. Listen Mykket Morton and live videos on youtube.

User avatar
update
Moderator
Posts: 6380
Joined: Mon 10. Jan 2005, 17:29
Location: germany / outdoor

Re: ...auf dem Weg nach bootstrap city

Post by update » Wed 11. Nov 2015, 10:21

Wieso funktioniert in Text mit Bild

Code: Select all

<div class="item [FIRST]active[/FIRST]">
eigentlich nicht?
It's mostly all about webdesign, logo design, new and old pages refresh, print BUT slowly switching to be supporter for the band Mykket Morton. Visit Mykket Morton on FB. Listen Mykket Morton and live videos on youtube.

Post Reply